我做过的事

我做过的事

我正在摆脱gnome-keyringSSH 代理的角色。

我做过的事

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

最后一件事神奇地起作用了不再代理的套接字:

/run/user/[uid]/keyring/ssh

问题

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

问题

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

陷阱

  • 我是不是询问如何将该变量重置为另一个值。
  • 我是不是询问如何在系统范围内或在 shell 配置文件中设置该值。
  • 我是不是要求一些初始化脚本巫毒咒语来冻结、设置、重置、取消设置或替换任何内容。
  • 我是不是询问如何卸载该东西的建议:我仍然需要它作为我的密码,它似乎是 Gnome 中最集成和最完善的密码管理器。

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

答案1

让我猜猜 - 你正在使用 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"

完整文件如下所示:

[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

答案2

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

gnome-keyring 在哪里设置 SSH_AUTH_SOCK?

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

initctl set-env --global SSH_AUTH_SOCK=$SSH_AUTH_SOCK

引用initctl手册:

initctl set-env VARIABLE[=VALUE]

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

-g,--global

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

SSH_AUTH_SOCK 首先来自哪里?

上述命令initctl的前提是环境变量 SSH_AUTH_SOCK 已经存在。那么,这是一个先有鸡还是先有蛋的问题吗?是什么决定了它的存在?

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

创建一个 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 目录中的文件。

答案3

https://wiki.archlinux.org/index.php/GNOME/Keyring#Disable_keyring_daemon_components

如果您希望运行替代的 SSH 代理(例如 ssh-agent 或 gpg-agent),您需要禁用 GNOME 密钥环的 ssh 组件。要以帐户本地方式执行此操作:

mkdir ~/.config/autostart
cp /etc/xdg/autostart/gnome-keyring-ssh.desktop ~/.config/autostart/ &&
echo 'Hidden=true' >> ~/.config/autostart/gnome-keyring-ssh.desktop

然后退出。

轻微编辑,删除明显无用的使用printf

答案4

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

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

相关内容