我正在摆脱gnome-keyring
SSH 代理的角色。
我做过的事
- 在互联网上搜索了几个小时。
- 经常改变东西并重新启动。
- 最后刚刚
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 设置的。