gnome-keyring在哪里设置$ SSH_AUTH_SOCK?


10

我正在放弃gnome-keyring使用SSH代理的过程。

我所做的事情

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

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

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

问题

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

什么是设置该变量的位置?

陷阱

  • 不是在问如何将变量重置为另一个值。
  • 不是在问如何在系统范围内或在Shell配置文件中设置该值。
  • 不是要一些初始化脚本的伏都教徒咒语来冻结,设置,重置,取消设置或替换任何东西。
  • 并不是在寻求有关如何卸载该设备的建议:我仍然需要它来作为我的密码,它似乎是Gnome中集成度最高,功能最完善的密码管理器。

我希望禁用该功能。


2
卸载gnome-keyring?
rudimeier '16

1
@rudimeier:我仍然需要使用gnome-keyring作为我的密码,据我所知,在Gnome中没有比这更完善的功能了。
JohnW

@rudimeier甚至没有帮助。我已经试过了
安德烈·伯瑞(AndréBorie)

Answers:


8

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

SSH_AUTH_SOCK出于某些原因,Gnome-Session有一个针对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

谢谢!在Ubuntu v17.10 Artful Aardvark上,只需将其添加export GSM_SKIP_SSH_AGENT_WORKAROUND=1到〜/ .profile并重新启动,即可修复以前在v17.04上可用的配置。
Stephen Niedzielski

这似乎不仅影响Wayland,而且在尝试使用gnome-flashback + i3时也遇到了这种情况。
dragon788

请注意,这种破解方法要到Gnome 3.24或更早版本(wiki.archlinux.org/index.php/GNOME/…)为止
Pablo Olmos de Aguilera C.

5

(OP的环境未知,因此此处给出的路径是在我的Ubuntu机器上找到的路径)

gnome-keyring在哪里设置SSH_AUTH_SOCK?

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

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最初是由原始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最初设置的“ true” SSH_AUTH_SOCK变量。

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

  • (系统范围的conf) /etc/xdg/autostart/gnome-keyring-ssh.desktop
  • (用户配置文件) ~/.config/autostart/gnome-keyring-ssh.desktop

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


我试过禁用Gnome密钥环的自动启动条目,似乎该变量仍然存在,但指向不存在的套接字(因此禁用密钥环有效,但该变量在其他位置设置)。我正在运行Archlinux计算机,因此没有暴发户,并且systemd中没有任何明显的变量可以设置该变量。
AndréBorie

@AndréBorie我既不了解Arch,也不了解systemd。套接字路径的新值是什么?在我的Macihne上,ssh-agent通常将其设置为/tmp/ssh-XXX/agent.PID。ssh-agent仍在您的进程列表中吗?
xhienne

路径就像原来的问题一样。没有SSH代理或密钥环在运行。
安德烈·伯瑞(AndréBorie)

这个答案确实很老,但我希望您也能帮我unix.stackexchange.com/questions/422574/…–
Ojs

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


这在Ubuntu 14.04上也适用于我。

对于3.24及更高版本而言,这是正确的。
Pablo Olmos de Aguilera C.

0

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

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.