解决方案:使用 dpkg-divert 禁用 gnome-keyring

解决方案:使用 dpkg-divert 禁用 gnome-keyring

我不想让 gnome-keyring 妨碍我的 git 提交,部分原因是它在要求输入密码时会锁定整个屏幕,即使在 KDE 上也是如此(尽管我现在已经切换到 GNOME)。虽然我确实很欣赏不必每次都输入 SSH 密码的便利性,但不得不从一个窗口跳到另一个窗口就抵消了这一点。这只是一个安慰 :/

我尝试了git config --global --unset credential.helpergit 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/nullchmod 0gnome-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/autostartgnome-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。

进一步解释

为什么不直接使用chmodmv

通过 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 很难被终止的原因之一是它在登录时通过(至少)四种不同的方法启动,每种方法都必须以特定的方式禁用。

  1. /etc/pam.d/gdm-password 中的 PAM(可插入身份验证模块)
  2. systemd 用户服务和套接字
  3. /usr/share/dbus-1/services/ 中的 systemd 用户 session.slice
  4. XDG 在 /etc/xdg/autostart/gnome-keyring-*.desktop 中自动启动

相关内容