当我连接到 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 启动:
- 在你的or中使用
xterm*loginShell: true
or ?xterm*loginShell: false
~/.Xdefaults
~/.xresources
- 通过运行
xterm -ls
或xterm
(不-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