为什么我不能与我的ssh-agent交互? (例如ssh-add -D不起作用)

在我的Kubuntu 14.04系统上,我正在尝试使用SSH代理管理密钥,但不知怎的,它似乎忽略了我的ssh-add命令。 看下面这个,你会明白我的意思。

  1. 列出当前键

     ⟫ ssh-add -l 2048 60:6f:58:ef:7c:b0:ec:94:fb:fa:59:21:86:3d:fc:4c gert@e6230 (RSA) 

    这个密钥在启动时加载,但我期望一些ECDSA密钥,而不是RSA。 我不知道这个关键……

  2. 从代理中删除密钥。

     ⟫ ssh-add -D All identities removed. 

    yey! 但是……是吗?

     ⟫ ssh-add -l 2048 60:6f:58:ef:7c:b0:ec:94:fb:fa:59:21:86:3d:fc:4c gert@e6230 (RSA) 

    我勒个去? 它只对我说谎。

  3. 这里发生了什么?

     ⟫ env | grep -i ssh SSH_AUTH_SOCK=/run/user/1000/keyring-eDJggO/ssh 

    让我们看看正在运行该套接字的进程。

     ⟫ sudo fuser -u /run/user/1000/keyring-eDJggO/ssh [sudo] password for gert: /run/user/1000/keyring-eDJggO/ssh: 9434(gert) ⟫ ps -p 9434 u USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND gert 9434 0.0 0.0 292528 7192 ? Sl 00:05 0:00 gnome-keyring-daemon [...] 

    GNOME密钥环在我的KDE系统上做了什么? KDE钱包不应该是我的SSH代理吗?

这导致了更多的问题而不是答案,我留下了一个非function性的ssh-agent。

在另一个系统上,我没有观察到这种行为,我找不到配置差异。 两者都只安装了KDE,安装的软件包几乎相同(由Puppet管理)。

注意:不是解决根本问题的答案。 如果您认为可以解决根本原因,请提供新的答案。 你真的必须阅读为什么我的解决方案只是一个丑陋的黑客。


这是对启动时发生的事情的解释,找出罪魁祸首。

使用KDM(或LightDM)作为登录管理器,登录后会为您生成X会话。登录管理器允许您根据系统中可用的会话选择X会话(例如GNOME,KDE等离子等) 。 目录/usr/share/xsessions包含安装的每个桌面环境的文件,您的用户特定选项保存在~/.dmrc

登录后加载桌面环境时,它会加载/etc/X11/Xsession.d/所有脚本。 在Kubuntu 14.04系统上,默认情况下我会看到/etc/X11/Xsession.d/90x11-common_ssh-agent ,初始化SSH代理。 正如所料。 大!

但在实践中我们看到了不同的东西。 gnome-keyring-daemon来自哪里,为什么常规的ssh-agent没有启动? 好吧,GNOME密钥环以两种方式启动:

  • XDG自动启动,位于/etc/xdg/autostart/gnome-keyring-ssh.desktop
  • 作为/usr/share/upstart/sessions/gnome-keyring.conf的Upstart 会话作业

所有脚本首先检查环境值是否继续。 例如

 [ -z "$SSH_AUTH_SOCK" ] || [ -z "$GPG_AGENT_INFO" ] || { stop; exit 0; } 

这使得它成为SSH代理实际启动的竞争条件。 第一个获胜。 支持更讨厌的位。

它如何可靠地在一台机器上运行而在另一台机器上不可靠 ? X会话upstart作业仅在DESKTOP_SESSION环境变量在/etc/upstart-xsessions列入白名单时启动,由/etc/X11/Xsession.d/00upstart处理。 KDM允许用户将桌面环境设置为“默认”( default~/.dmrc ),有效的是kde-plasma ,但不会出现kde-plasma

使用Session=kde-plasma

 ⟫ echo $DESKTOP_SESSION kde-plasma 

在KDE等离子桌面上使用Session=default

 ⟫ echo $DESKTOP_SESSION default 

这是完全错误的。 你现在可以猜到为什么它没有通过/etc/upstart-xsessions的白名单检查。

快速修复运行终端会话

 killall gnome-keyring-daemon && eval `ssh-agent` 

结论

似乎可以在所有Upstart会话作业完全没有启动的情况下遇到错误。 另一个错误阻止与GNOME密钥环SSH代理正确连接(或者ssh-add应该抱怨并失败)。 哦,我恨你,虫子。

一旦我抽出时间对究竟应该做什么进行一些研究,我就会提交错误报告。

目前我决定只使用Upstart错误并通过设置Session=default阻止Upstart会话作业运行。 我不知道这有多少破裂,但到目前为止我还没有看到任何分崩离析。

根本原因是首先出现了GNOME密钥环,它不应该骗我并继续提供错​​误的密钥。

无论如何,我总是以sudo apt-get remove –purge gnome-keyring结束 ,然后重启。 ubuntu-sso依赖它,但我不使用它,所以不用担心。

ssh-agent似乎只是在事后应该工作。

我意识到这是一个老线程。 我正在使用xubuntu 16.04。 似乎错误仍然存​​在。 我安装了海马来管理密钥并且工作正常。