xubuntu:从冒充ssh-agent停止gnome-keyring-daemon

我想在xubuntu中使用真正的ssh-agent而不是gnome-keyring。 我按照http://dtek.net/blog/how-stop-gnome-keyring-clobbering-opensshs-ssh-agent-ubuntu-1204中的步骤进行操作,但是gnome keyring仍然将自己注册为ssh-agent。 我仍然想继续使用gnome-keyring来获取其他密码

事实certificate,如果在xfce中打开gnome兼容性,xfce4-session将无条件地启动gnome-keyring-daemon。 这是硬编码的,目前还没有办法配置它。 禁用gnome兼容模式会导致密钥环无法在登录时启动,如果启动密码,则需要再次提供密码。

最简单的解决方案似乎是拦截对gnome-keyring-daemon的调用,并插入一个脚本,将--components标志插入参数以防止gnome keyring替换ssh-add。

运行以下命令以移动gnome-keyring-daemon:

 sudo mv /usr/bin/gnome-keyring-daemon /usr/bin/gnome-keyring-daemon-wrapped 

用。创建一个新的gnome-keyring-daemon

 sudo nano /usr/bin/gnome-keyring-daemon 

并插入以下内容:

 #!/bin/sh exec /usr/bin/gnome-keyring-daemon-wrapped --components=pkcs11,secrets,gpg "$@" 

使用sudo chmod +x /usr/bin/gnome-keyring-daemon新的gnome-keyring-daemon可执行文件。

现在gnome密钥环将不再尝试替换ssh-add。

请注意,升级系统将恢复默认的gnome-keyring-daemon,因此升级后可能需要再次执行上述步骤。

编辑:

在xubuntu 14.10中,启动工作略有不同,因为gkd也是从会话upstart开始的。 可以覆盖upstart配置,因此它不会启动ssh组件,但即使如此,当xfce4-session也尝试启动时,gkd将启动其ssh组件。 因此,如果你想让xfce也自动启动gnome服务,你仍然需要上面的hack。 另一种方法是禁用gnome服务(设置 – >会话和启动 – >高级 – >启动时启动GNOME服务),配置upstart以使用--components=pkcs11,secrets,gpg标志启动gkd,还可以选择配置gnome您想要手动启动的服务。

(除了上面提到的两个启动gkd的地方之外,gk-daemon也是在之前从lightdm / PAM启动的,以便接收用户的登录密码。但是这个启动并没有完全配置gkd,它仍然希望完全配置通过第二次尝试启动它,以便启动尝试与当前问题无关。)

为了构建@JanKanis的答案,我将其追溯到xfce4-session是启动gnome-keyring-daemon –start命令的罪魁祸首。

当以这种方式运行时,gnome-keyring-daemon不会检查是否已经设置了SSH_AUTH_SOCK,这是一个“function”,因为您可以同时使用ssh-agent和gnome-keyring-daemon提供套接字。

首先要做的事情:

添加~/.config/upstart/gnome-keyring.conf

 description "GNOME Keyring agents" author "Dimitri John Ledkov " start on (starting xsession-init or starting ssh-agent or starting gpg-agent) and started dbus task script # Stop because I say so stop; exit 0 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 end script 

现在用包装器替换gnome-keyring-daemon(我将原始文件移到了/ usr / libexec /):

 #!/bin/sh gkd=/usr/libexec/gnome-keyring-daemon debug=1 log=${XDG_CACHE_HOME:-"${HOME}/.cache"}/gkd.log if [ ${debug} -gt 0 ] then echo "================" >> ${log} echo "Invoked as $0 $@" >> ${log} echo "================" >> ${log} /usr/bin/pstree -lag >> ${log} fi case "$@" in *--start*) $gkd --components=pkcs11,secrets,gpg "$@" ;; *) $gkd "$@" ;; esac if [ ${debug} -gt 0 ] then /usr/bin/pstree -lag >> ${log} fi 

调试代码可以帮助您找出它停止工作的原因。 由于这些程序都没有合理的配置方法,因此无法解决黑客命令问题。 在这种情况下,我找不到任何记录的xfce4-session配置方法,不能调用gnome-keyring-daemon –start,它没有其他副作用。 他们都对正在安装的东西做出了蠢事,因此请继续阅读用户的想法。

这是一个老线程,但我在Xubuntu 14.04上解决这个问题的方法很简单,只需在Session和Startup上重新生成gnome-keyring-daemon 。 你需要做的只是运行以下命令:

 $ gnome-keyring-daemon --replace --daemonize --components=pkcs11,secrets,gpg 

我们从Gnome密钥环的组件中删除“ssh”。

  1. 转到菜单>设置>会话和启动
  2. 单击应用程序自动启动选项卡
  3. 单击添加按钮
  4. 将出现新的应用程序窗口,您可以像下面的示例一样填写它
    1. 名称 :SSH Keyring Remover
    2. 描述 :从GNOME密钥环中删除SSH
    3. 命令gnome-keyring-daemon --replace --daemonize --components=pkcs11,secrets,gpg
  5. 单击确定

尝试注销您的XFCE会话并重新登录。 为了确保Gnome密钥环不再管理ssh,只需运行即可。

 $ ssh-add -l Could not open a connection to your authentication agent. 

如果您收到该消息意味着Gnome密钥环不管理您的SSH,您可以自由使用原始的OpenSSH ssh-agent实现。

这是JanKanis发布的脚本的侵入性较小的版本。 它接受传递给它的任何组件,但是拉出SSH组件。

 #!/bin/bash ARGS="$@" COMPONENTS="" if [[ $ARGS =~ \-\-components= ]]; then component_match_expression='(\-\-components=([0-9a-z,]+))' COMPONENTS=$(echo $ARGS | grep -oP "$component_match_expression") ARGS=$(echo $ARGS | sed -E "s/$component_match_expression//") COMPONENTS="--components=$(echo $COMPONENTS | grep -oP '(?<=\-\-components=)([0-9a-z,]+)' | sed -e 's/ssh//' -e 's/,,/,/')" if [ "$COMPONENTS" != "--components=" ]; then ARGS="$ARGS $COMPONENTS" else exit 0 fi fi /usr/bin/gnome-keyring-daemon-wrapped $ARGS 

我刚刚在Xubuntu 16.04上遇到过这个问题,我也想让ssh-agentgpg-agent工作。

首先,我不关心gnome-keyring,所以我删除了所有相关的包。 例如。

 sudo dpkg -P libgnome-keyring-common libgnome-keyring0 libp11-kit-gnome-keyring libpam-gnome-keyring libgnomeui-0 python-gnome2 gir1.2-gnomekeyring-1.0 system-config-printer-gnome 

此时ssh-agentgpg-agent都运行成功,但由于未设置$GPG_AGENT_INFO ,gpg无法连接到gpg-agent 。 这真的很奇怪,因为如果我们查看/etc/X11/Xsession.d/90gpg-agent它最初显然已经设置好了。 有些东西必须取消它。

为了帮助找到罪魁祸首,我创建了一个自定义会话文件:

 $ cat /usr/share/xsessions/xsession.desktop [Desktop Entry] Version=1.0 Name=Xsession Exec=/etc/X11/Xsession Icon= Type=Application 

然后,我创建了一个自定义的${HOME}/.xsession文件并使其可执行,具体如下:

 #!/bin/sh # DEBUG echo "GPG_AGENT_INFO: ${GPG_AGENT_INFO}" > "${HOME}/GPG_AGENT_INFO" # Defined by /etc/alternatives/x-session-manager exec x-session-manager 

我注销,重新启动lightdm并再次登录(选择了“Xsession”会话),并检查了${HOME}/GPG_AGENT_INFO 。 果然,环境变量仍然存在。 所以这是Xfce4做的傻事。

四处寻找,我最终偶然发现了这个:

 $ strings /usr/bin/xfce4-session | grep gpg /startup/gpg-agent/enabled gpg-agent gpg-agent-info GNOME compatibility is enabled and gnome-keyring-daemon is found on the system. Skipping gpg/ssh-agent startup. gpg-agent is configured as SSH agent, but gpg-agent is disabled or not found Failed to kill gpg-agent with pid %d $ 

似乎xfce4-session可能在尝试启动gnome-keyring-daemon时取消设置该变量,因此该解决方案需要两个步骤。 首先,转到Applications -> Settings -> Session and Startup -> Advanced然后选中Launch GNOME services on startup 。 接下来,在$PATH某个位置创建一个名为gnome-keyring-daemon的可执行文件,其中包含以下内容:

 #!/bin/sh # # This script exists to satisfy an XFCE4 check which prevents # the GPG_AGENT_INFO environment variable getting unset. 

再次注销,您应该进行排序。 你现在也应该能够删除/usr/share/xsessions/xsession.desktop${HOME}/.xsession如果你也创建它们,因为它们只是用于调试。