我不想让 gnome-keyring 妨碍我的 git 提交,部分原因是它在要求输入密码时会锁定整个屏幕,即使在 KDE 上也是如此(尽管我现在已经切换到 GNOME)。虽然我确实很欣赏不必每次都输入 SSH 密码的便利性,但不得不从一个窗口跳到另一个窗口就抵消了这一点。这只是一个安慰 :/
我尝试了git config --global --unset credential.helper
和git config --system --unset credential.helper
,但似乎没有效果。由于我现在正在使用 GNOME,我宁愿不删除 gnome-keyring。还有其他选择吗?我目前使用的是 Ubuntu 14.10,在 Kubuntu 和 Ubuntu GNOME 上都这样做过。谢谢。
2014 年 11 月 17 日更新
这显然会影响所有 SSH。我尝试过
sudo rm /etc/xdg/autostart/gnome-keyring-ssh.desktop
但那没用。我可以
gnome-keyring-daemon --replace -c pkcs11,secrets,gpg
每节课一次,但我想保持这种状态。仍在寻找……
答案1
只需将相关.desktop
文件从/etc/xdg/autostart
复制到~/.config/autostart
并添加Hidden=true
到其中:
(cat /etc/xdg/autostart/gnome-keyring-ssh.desktop; echo Hidden=true) > ~/.config/autostart/gnome-keyring-ssh.desktop
然后重新加载 gnome 外壳(按Alt+ F2,然后输入r并按Enter)。
这是唯一用户友好的解决方案对我来说很有用(即不必软链接。桌面文件到/dev/null或chmod 0
)gnome-keyring-daemon
。事实上,软链接到/dev/null在 GNOME 3.16 中它已经停止工作。
功劳归于新加坡。
答案2
除了 Trusty 之外,我无法代表 Ubuntu 的其他版本发言 — — GNOME 是一个不断变化的目标,你可以保证每个版本都会有所不同 — — 但这是我发现最可靠的:
mkdir -p ~/.config/autostart
cp /etc/xdg/autostart/gnome-keyring-ssh.desktop ~/.config/autostart/
echo "X-GNOME-Autostart-enabled=false" >> ~/.config/autostart/gnome-keyring-ssh.desktop
至少在 Unity 下启动会话,而且很可能在 GNOME3 下也很奇怪:它将运行 Upstart 脚本,然后/usr/share/upstart/sessions/
运行和下的所有自动启动桌面条目/etc/xdg/autostart
,gnome-keyring
并且许多其他东西都在两者中(并且它可能/usr/share/upstart/xdg/autostart
也在中运行东西;我没有测试过)。
upstart条目gnome-keyring-ssh
将在系统或用户本地 .desktop 条目中检查该X-GNOME-Autostart-enabled=false
行,然后退出,然后ssh-agent
运行标准会话。然后系统范围gnome-keyring-ssh
将启动,/etc/xdg/autostart
除非您的用户本地自动启动中有一个匹配的条目,在这种情况下将运行该条目。
以前,在本地自动启动中只需有这一enable=false
行就足够了,但最近(例如,自 2016 年 5 月以来,Trusty 的 LTS 期限已超过两年),这种行为发生了变化,您需要类似完整条目的内容。我仍在调查所需的精确密钥集,以及导致问题的软件包更新。
为什么 GNOME 人员不直接通过 OpenSSH 密钥代理进行代理呢?谁也猜不到。你也许想建议他们采取更明智的行为在此 Bugzilla 条目中。
答案3
很好,干净的方法来禁用 gnome-kerying 的 ssh-agent 组件:
gconftool-2 --set --type bool /apps/gnome-keyring/daemon-components/ssh false
答案4
解决方案:使用 dpkg-divert 禁用 gnome-keyring
sudo dpkg-divert --local --rename /usr/bin/gnome-keyring-daemon
下次登录时,它就会消失。这一行就是您所需要的,但请继续阅读以了解解释和警告。
简短解释
该解决方案将该程序重命名为 gnome-keyring-daemon.distrib,因此无法找到它。
当您登录时,gnome-keyring 不会尝试处理 ssh 集成,密码请求将直接发送到 ssh-agent。您可以使用常用ssh-add
命令解锁 ssh 密钥以进行 git 提交。
警告和悔恨
Gnome Keyring 非常交织在一起使用 Gnome 桌面。如果没有它,有些功能可能会停止运行,直到安装替代版本。
重新启用 Gnome Keyring
sudo dpkg-divert --remove --rename /usr/bin/gnome-keyring-daemon
您可能正在使用 Gnome Keyring 但不知道
许多可以保存密码的应用程序(例如 Chromium 和 Evolution)使用存储在 Gnome Keyring 中的主密钥对密码进行加密。禁用 Gnome Keyring 可防止访问所有存储的密码。禁用 Gnome Keyring 之前备份已保存的密码是个好主意。
备份 Gnome 密钥环
您可以通过复制 ~/.local/share/keyrings/ 中的文件来备份密钥。密钥是加密的,因此,根据您的安全立场,您可能希望将其备份为纯文本。为此,请使用“密码和密钥”程序(又名“Seahorse”)为登录密钥环临时设置一个空密码。(提示:Seahorse 隐藏了右键单击上下文菜单中的更改密码选项。)
警告:密码可能以明文形式存储
Chromium 和 Google Chrome 依靠名为“Secret Service”的守护进程来获取已保存密码的加密密钥。如果缺少 Secret Service(一旦您禁用 Gnome Keyring 就会出现这种情况),它们将保存您的密码未加密。与 Firefox 不同,基于 Chromium 的浏览器目前不提供手动设置主密码的方法。
Freedesktop.org 的特勤局整合
Gnome Keyring 只是可以充当 Secret Service 守护进程的程序之一。要确保在 Chromium 和 Evolution 中保存的密码是加密的,您可以安装 keepassxc 并在设置中启用 Secret Service。
进一步解释
为什么不直接使用chmod
或mv
?
通过 chmod 或 mv 进行的更改将在系统更新后恢复。通过使用 dpkg,此解决方案将在任何情况下持续存在,即使升级到 Ubuntu 的新版本也是如此。
有没有不那么激烈的方法?
在撰写本文时,似乎无法告诉 Gnome Keyring 继续提供 Secret Service Integration 并停止干扰 ssh-agent。对于许多人来说,这是理想的选择,因此希望 Gnome 将来能添加该选项。
为什么其他方法不起作用
多年来,人们提出了许多不同的解决方案,但这些解决方案在下一个版本中却被打破了。下面是原因的简要总结。
配置 Gnome 密钥环
理想的解决方案是配置 Gnome Keyring 以执行正确的操作。实际上有一个命令行选项--components
几乎可以正常工作。它允许指定要初始化哪些组件:
gnome-keyring-daemon --components secrets,ssh,pkcs11
可以从列表中省略 ssh,理论上,它不会搞乱 ssh 身份验证。不幸的是,这不是我的经验。也许问题是 gnome-keyring 是从多个位置启动的(见下文),但简而言之:没有办法告诉 Gnome Keyring绝不加载ssh组件,只需说现在不要。
apt 删除 gnome-keyring
删除 gnome-keyring 软件包的明显解决方案也会卸载所有依赖它的软件包,包括 gnome-core。虽然有办法解决这个问题,但很容易意外地卸载整个 GNOME 桌面环境。
多种攻击方式
gnome-keyring-daemon 很难被终止的原因之一是它在登录时通过(至少)四种不同的方法启动,每种方法都必须以特定的方式禁用。
- /etc/pam.d/gdm-password 中的 PAM(可插入身份验证模块)
- systemd 用户服务和套接字
- /usr/share/dbus-1/services/ 中的 systemd 用户 session.slice
- XDG 在 /etc/xdg/autostart/gnome-keyring-*.desktop 中自动启动