可以让 XTERM 和 Gnome-keyring 一起工作吗?

可以让 XTERM 和 Gnome-keyring 一起工作吗?

当我连接到 ssh 时gnome 终端应用程序打开 gnome-keyring 对话框,因此我每个会话仅输入一次密码,并且可以多次重新连接到同一 ssh,而无需询问密码。

但这在 xterm 中不起作用。也许有人可以帮助完成这项工作?

答案1

您是否也在 Gnome 会话中运行 xterm?

在 Gnome 终端中试试这个:

echo $SSH_AUTH_SOCK

然后在 xterm 中尝试同样的操作。

它应该打印类似的内容

/tmp/keyring-abc123/ssh

同时。

我猜它不会在 xterm 中打印类似的内容。

如果它是空的,则表明有东西正在清除它(或未设置它)。

如果看起来更像

/tmp/ssh-defgh67890/agent

那么你也在某个地方运行 ssh-agent ,这会让人感到困惑。

这是我要尝试的:

两者都运行echo $0。一个一-开始 就有,另一个没有?

如果是这样,您可能在登录 shell 中运行 ssh-agent,但在非登录 shell 中没有运行。查看您的~/.bashrc~/.bash_profile或等效脚本并修复问题。

或者更改 xterm 是否作为登录 shell 启动:

  1. 在你的or中使用xterm*loginShell: trueor ?xterm*loginShell: false~/.Xdefaults~/.xresources
  2. 通过运行xterm -lsxterm(不-ls

复制配置文件首选项 -> 标题和命令 -> 作为登录 shell 运行命令下的 Gnome 终端设置。

如果失败,请尝试echo在启动文件中添加语句。您需要使用echo $SSH_AUTH_SOCK >> ~/ssh-debug.log或类似的方法将输出重定向到日志文件。

然后注销并重新登录,然后查看您的~/ssh-debug.log.

然后运行 ​​Gnome Terminal 再次查看。

然后运行xterm看看再看看。

寻找差异。

查看 /etc/pam.d/gdm 和系统 -> 首选项 -> 启动应用程序。 /etc/pam.d 中是否有其他 ssh-agent 配置?

看一下/etc/X11/Xsession它调用的脚本。

答案2

您还可以查看给出的解决方法Red Hat Bugzilla - Bug 713955 - 通过键盘快捷键启动的终端中不存在 SSH_AUTH_SOCK 环境变量通过将其添加到您的~/.bashrc

#GPG and SSH agent not exported when running terminal by shortcut
if [ -z "$GPG_AGENT_INFO" -a -z "$SSH_AUTH_SOCK" -a -n "$GNOME_KEYRING_CONTROL" ] ; then
        #derive GPG and SSH agent info from GNOME_KEYRING_CONTROL
        export GPG_AGENT_INFO="$GNOME_KEYRING_CONTROL/gpg:0:1"
        export SSH_AUTH_SOCK="$GNOME_KEYRING_CONTROL/ssh"
fi

就我而言(带有 gnome 2.28 的 Centos 6),该GNOME_KEYRING_CONTROL变量不存在(但GNOME_KEYRING_SOCKET确实存在),并且 gnome 密钥环“seahorse”似乎没有提供 GPG_AGENT_INFO。

所以我最终得到了这个版本(也放在~/.bashrc):

set_keyring_agent() {
# SSH agent not exported when running terminal by shortcut
# see https://bugzilla.redhat.com/show_bug.cgi?id=713955#c4
# and http://unix.stackexchange.com/questions/11355/its-possible-to-make-xterm-and-gnome-keyring-work-together
if [[ -n "${GNOME_KEYRING_SOCKET}" && -z "${SSH_AUTH_SOCK}" ]] ; then
  #derive SSH agent info from GNOME_KEYRING_SOCKET
  local ssh_auth_socket="${GNOME_KEYRING_SOCKET}.ssh"
  if [[ -S "${ssh_auth_socket}" ]] ; then
    export SSH_AUTH_SOCK="${ssh_auth_socket}"
  fi
fi
}

set_keyring_agent

答案3

虽然我不知道是什么魔力使 gnome-terminal 从 gnome-keyring-daemon 获得正确的 SSH_AUTH_SOCK,但我找到了一种解决方法来在 XTerm(或其他终端)中设置正确的值。将以下内容添加到您的 .bashrc 中:

SSH_AUTH_SOCK=`netstat -xl | grep -o '/tmp/keyring-.*/ssh$'`
[ -z "$SSH_AUTH_SOCK" ] || export SSH_AUTH_SOCK

它的作用是:它查找名称与模式“/tmp/keyring-*/ssh”匹配的本地侦听套接字,并将 SSH_AUTH_SOCK 的值设置为该值(如果存在)。

来源:http://ubuntuforums.org/showthread.php?p=10786874#post10786874

相关内容