如何禁用SSH和GPG的密钥环?

如何禁用SSH和GPG的钥匙环?
我想保留wifi和其他东西的钥匙环。我正在使用Ubuntu 12.04。

1你难道不能简单地拒绝将这些密码保存在钥匙链上吗?对于标准的SSH来说,除非你专门设置了,否则它是不会保存密码的,根据我的经验。 - Marty Fried
我不知道。有没有重置钥匙链的方法。用于测试它?主题标题中提到了Ubuntu 12.04 LTS,但@jorge-castro已更改它。 - brodul
1钥匙扣在过去一段时间里并没有太大的变化,但我将其添加到问题中以增加清晰度,不过并不需要在标题中出现,因为答案很可能适用于多个版本。 - Jorge Castro
抱歉问个菜鸟问题,但是你禁用SSH密钥环的动机是什么? - Stephane
2@Stephane 我不能代表原帖作者发言,但我不希望如此重要的信息以任何方式暴露出来。与其让密钥环存储密码并允许任何程序和每个用户空间中的人随意访问SSH,我宁愿每次连接到服务器时输入我的SSH密钥密码。当然,这对其他人来说可能没有意义,但在我看来,这里的动机是可以理解的。 - phil294
4个回答

首先将文件/etc/xdg/autostart/gnome-keyring-ssh.desktop复制到~/.config/autostart/
然后编辑~/.config/autostart/gnome-keyring-ssh.desktop以删除以下行:
NoDisplay=true

并在末尾添加以下行:
X-GNOME-Autostart-enabled=false

这样做可以在重新启动会话时禁用SSH管理。 要禁用GPG,请对文件/etc/xdg/autostart/gnome-keyring-gpg.desktop执行相同操作。

谢谢,这终于解决了问题。 - brodul

在终端会话中(使用Ctrl-Alt-T),您可以通过以下方式停止gnome-keyring进程与ssh的工作:
unset SSH_AUTH_SOCK 

--no-use-agent选项可用于gpg,以避免与gpg一起使用gnome-keyring进程,但这是默认设置。

您可以通过使用以下命令停止nautilus seahorse-tool使用gpg-agent:

rm `echo $GPG_AGENT_INFO | sed s/:0:1//`

你可以使用以下命令完全停止gnome-keyring进程:
kill $GNOME_KEYRING_PID

每个上述操作都可以通过重新登录来恢复。

Wifi密码对所有用户ID可用存储在/etc/NetworkManager/system-connections/目录中,而不是存储在您的gnome钥匙环中,因此如果您终止gnome-keyring进程,它们仍然可用。

在gnome-keyring进程运行时,可以使用ssh-add命令从当前gnome钥匙环中删除(或添加)特定密钥。

可以使用Passwords and Keys程序(seahorse)的Passwords选项卡从登录或其他钥匙环中删除单个密钥密码。

如果没有gnome-keyring存在,ssh-agent仍将运行,但它不会存储gpg密钥。


在/etc/pam.d/lightdm文件中有两行与保存登录密码和使用登录密码解锁登录钥匙环并启动gnome-keyring-daemon有关。第二行是启动该守护进程:
session optional        pam_gnome_keyring.so auto_start

仅注释掉这一行将会阻止所有用户的所有会话使用登录密码解锁登录钥匙环。 /etc/xdg/autostart/ 包含了各种类别的机密,gnome-keyring 可以处理。要停止守护程序启动这些组件,可以将这些文件移出该目录。您可以移动所有的 gnome-keyring-* 文件来停止守护程序的启动,或者只需拒绝再次提供登录密码以禁用登录钥匙环,同时保持守护程序运行。

取消设置 SSH_AUTH_SOCK 可行。谢谢。有没有一种方法可以在所有会话中取消设置?我在 Thunderbird 上使用 Enigmail,但是它存在一个问题(它无法忘记密码)。 - brodul
有没有办法在启动时禁用密钥环?(我真的不想编写一个脚本来关闭密钥环)。 - brodul
我已经编辑了答案,并添加了一些可能有用的信息,但最好直接提出一个关于Enigmail绕过的单独问题,明确说明你想要什么。 - John S Gruber
你可以通过执行gnome-keyring-daemon -r -d来清除密钥环(忘记你的密码,包括gpg、ssh和其他密码)。这是重新启动守护进程的简单方法。可能的问题是,如果它一开始没有运行,它会启动起来(我不知道一个好的方法只在它已经运行时重新启动它,除非解析ps :/)。 - unhammer

要阻止gnome-keyring在Ubuntu 16.04上启动其(broken)SSH代理,请执行以下操作:
mkdir ~/.config/upstart || true
echo manual > ~/.config/upstart/gnome-keyring-ssh.override

# This step can be done with the gnome-session-properties tool
mkdir ~/.config/autostart || true
cp /etc/xdg/autostart/gnome-keyring-ssh.desktop ~/.config/autostart
echo 'X-GNOME-Autostart-enabled=false' >> ~/.config/autostart/gnome-keyring-ssh.desktop

我看到你最后一行使用了这个事实,即/usr/share/upstart/sessions/gnome-keyring-ssh.conf在导出SSH_AUTH_SOCK之前立即退出。我认为如果你还将Hidden=true附加到.desktop文件中,那么你就不需要~/.config/upstart文件/目录了。这基本上会将“真正”的(系统)快捷方式从所有桌面中隐藏起来,即使它通常适用于像GNOME/Unity这样的桌面环境。我很快就会测试这个方法,因为我一直在寻找一种干净的方法来禁用gnome-keyring-ssh而不影响其他功能。 - dragon788

在当前版本的Ubuntu中,仅仅更改其他答案中提到的.desktop文件已经不再足够。还添加了一个额外的upstart任务被添加,它也会启动gnome-keyring-daemon。该文件位于/usr/share/upstart/sessions/gnome-keyring.conf,内容如下:
eval "$(gnome-keyring-daemon --start)" >/dev/null
initctl set-env --global SSH_AUTH_SOCK=$SSH_AUTH_SOCK
initctl set-env --global GPG_AGENT_INFO=$GPG_AGENT_INFO

在这里,守护进程需要通过在命令行中添加--components=pkcs11,secrets来限制只提供一些服务。可以删除initctl行,结果如下:
eval "$(gnome-keyring-daemon --start --components=pkcs11,secrets)" >/dev/null

1如何在不修改系统文件的情况下,针对每个用户覆盖此文件? - dolmen
更改系统文件是一种不良做法。请查看我的回答。 - dolmen