xubuntu:阻止 gnome-keyring-daemon 模拟 ssh-agent

xubuntu:阻止 gnome-keyring-daemon 模拟 ssh-agent

我想在 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 来处理其他密码

答案1

事实证明,如果在 xfce 中启用了 gnome 兼容性,xfce4-session 将无条件启动 gnome-keyring-daemon。这是硬编码的,目前无法配置。禁用 gnome 兼容模式会导致 keyring 在登录时不启动,如果启动它,您将需要再次提供密码。

最简单的解决方案似乎是拦截对 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 "$@"

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

现在 gnome keyring 将不再尝试替换 ssh-add。

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

编辑:

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

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

答案2

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

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

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

  1. 前往菜单 > 设置 > 会话和启动
  2. 单击“应用程序自动启动”选项卡
  3. 点击添加按钮
  4. 将出现新的应用程序窗口,您可以按照以下示例进行填写。
    1. 姓名: SSH 钥匙圈移除器
    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 实现。

答案3

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

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

首先要说的是:

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

description "GNOME Keyring agents"
author "Dimitri John Ledkov <[email protected]>"

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,而且没有其他副作用。它们都对正在安装的东西做出假设,因此继续读取用户的想法。

答案4

这是 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

相关内容