gnome-keyring 在哪里设置 $SSH_AUTH_SOCK?

Joh*_*hnW 11 gnome gnome-keyring openssh ssh-agent

我正在摆脱gnome-keyring作为 SSH 代理的身份。

我做过的事情

  • 在互联网上搜索了几个小时。
  • 经常更改内容并重新启动。
  • 最后只是rm-ed 所有与 SSH 相关的自动启动内容。

最后一件事神奇地起作用了,因为那里不再有代理的套接字:

/run/user/[uid]/keyring/ssh
Run Code Online (Sandbox Code Playgroud)

问题

剩下的问题是,尽管我获得美妙的上述结果,一些gnome-keyring仍然坚持设置SSH_AUTH_SOCK现在 不存在上述插座。就像僵尸一样,这些东西永远不会死。

什么是设置该变量以及它在哪里完成?

陷阱

  • 不是在问如何将该变量重置为另一个值。
  • 不是在问如何在系统范围内或在 shell 配置文件中设置该值。
  • 不是要求一些 init-script 巫毒咒语来冻结、设置、重置、取消设置或替换任何东西。
  • 不是在寻求有关如何卸载该东西的建议:我的密码仍然需要它,而且它似乎是 Gnome 中集成度最高、功能最完善的密码管理器。

我希望那个东西应该被禁用。

小智 10

让我猜猜 - 您正在使用 Wayland。我今天遇到了这个问题,并认为我会分享解决方案。

SSH_AUTH_SOCK由于某种原因,Gnome-Session 对under wayland 进行了硬编码覆盖。请参阅以下提交:https : //github.com/GNOME/gnome-session/commit/a8896ccad65583885735a04205351f48a42f29ae

解决方法?设置环境变量来禁用此行为:GSM_SKIP_SSH_AGENT_WORKAROUND=1。这会使环境设置代码短路。

对于发现此问题并尝试配置 ssh-agent 的人:在我的 ssh-agent 的 systemd 单元文件中,我有以下行:

ExecStartPost=/usr/bin/bash -c "/usr/bin/systemctl --user set-environment SSH_AUTH_SOCK=$SSH_AUTH_SOCK GSM_SKIP_SSH_AGENT_WORKAROUND=1"
Run Code Online (Sandbox Code Playgroud)

完整文件如下所示:

[Unit]
Description=SSH Agent
IgnoreOnIsolate=true

[Service]
Type=forking
Environment=SSH_AUTH_SOCK=%t/ssh-agent.socket
ExecStart=/usr/bin/ssh-agent -a $SSH_AUTH_SOCK
ExecStartPost=/usr/bin/bash -c "/usr/bin/systemctl --user set-environment SSH_AUTH_SOCK=$SSH_AUTH_SOCK GSM_SKIP_SSH_AGENT_WORKAROUND=1"

[Install]
WantedBy=default.target
Run Code Online (Sandbox Code Playgroud)


xhi*_*nne 6

(OP 的环境未知,所以这里给出的路径是在我的 Ubuntu 机器上找到的路径)

gnome-keyring 在哪里设置 SSH_AUTH_SOCK?

要回答标题中的主要问题,SSH_AUTH_SOCK 由 gnome-keyring/usr/share/upstart/sessions/gnome-keyring-ssh.conf使用以下命令设置:

initctl set-env --global SSH_AUTH_SOCK=$SSH_AUTH_SOCK
Run Code Online (Sandbox Code Playgroud)

引用initctl手册:

initctl set-env VARIABLE[=VALUE]

添加或更新作业环境表中的变量。以这种方式设置的变量将应用于作业的所有后续启动流程。

-g, --global

对全局作业环境表和所有现有的运行作业环境表进行操作。

SSH_AUTH_SOCK 首先来自哪里?

上述initctl命令的条件是环境变量 SSH_AUTH_SOCK 已经存在。那么,是先有鸡还是先有蛋的局面?什么设置?

SSH_AUTH_SOCK 最初由原始 ssh-agent 设置,它在 X 会话的最开始时启动。引用手册:

一个 UNIX 域套接字被创建,这个套接字的名称存储在SSH_AUTH_SOCK环境变量中。该套接字仅可供当前用户访问。

但是,gnome-keyring 的 ssh 组件所做的是将自身替换为现有的 ssh-agent。因此,它用自己的套接字覆盖 SSH_AUTH_SOCK,/run/user/.../keyring-.../ssh以便应用程序与其对话,而不是与 ssh-agent 对话。

如何禁用它

现在,让我们回答最后一句话“我希望那个东西被禁用”。OP 想要的是禁用 gnome-keyring 中的 ssh 组件对 SSH_AUTH_SOCK 的覆盖。他们想要取回最初由 ssh-agent 设置的“真实”SSH_AUTH_SOCK 变量。

ssh 组件由上述相同的启动脚本 ( /usr/share/upstart/sessions/gnome-keyring-ssh.conf)启动,但在一个条件下:X-GNOME-Autostart-enabled=false不得在以下任一文件中找到该字符串:

  • (全系统配置) /etc/xdg/autostart/gnome-keyring-ssh.desktop
  • (用户配置) ~/.config/autostart/gnome-keyring-ssh.desktop

因此,如果您想禁用它,您所要做的就是X-GNOME-Autostart-enabled=false在这些文件之一中添加一行,最好是在您的 HOME 目录中的那个文件中。


Ada*_*ter 0

从 Gnome 3.18 开始,套接字似乎存储在~/.cache/keyring-(some random string)/ssh

据猜测,它是由 gnome-keyring-daemon 设置的。