如果打开新的 gnome 终端,ssh-add 会被忘记

如果打开新的 gnome 终端,ssh-add 会被忘记

之后:

eval `ssh-agent -s`
ssh-add

我可以通过 ssh 登录到“服务器”,无需密码。

问题:但是如果我打开一个新的 gnome 终端,我必须再次执行此操作,为什么?

将 RHEL Desktop 6.6 与 GNOME 结合使用。

更新#1:有趣的是,另一个 RHEL 桌面不运行 ssh-agent,它每次启动只需要一个“ssh-add”。但在“坏桌面”上发出“ssh-add”只会给出错误消息:“无法打开与身份验证代理的连接。”

更新#2:重新启动后 SSH_AUTH_SOCK 丢失,也许这就是问题所在?:

[user@notebook ~]$ env | grep SSH
SSH_ASKPASS=/usr/libexec/openssh/gnome-ssh-askpass
[user@notebook ~]$ 

答案1

ssh-addssh参考几个环境变量来查找要与之通信的 SSH 代理:SSH_AGENT_PIDSSH_AUTH_SOCK。当你跑步时

eval `ssh-agent -s`

ssh-agent输出值并且你的 shell 解释它们;它们是在运行命令的 shell 中设置的,只有那个壳。因此,当您启动新终端时,该终端中的新 shell 没有正确设置这些变量,并且ssh无法找到代理。

如果两个终端都在运行,则可以运行

env | grep SSH

在启动代理的终端中,并设置新终端中给定的值。然后ssh应该在第二个终端找到代理。

不过,更好的解决方案是使用 GNOME 中的 SSH 代理集成,如gnome-keyring.我不确定 RHEL Desktop 中的设置如何,但您可以尝试简单地运行ssh-add而不预先启动代理...

GNOME 密钥环 SSH文档可能会有所帮助;特别是,您可能需要检查启动应用程序(在 GNOME 属性中)是否启用了 SSH 密钥代理。

答案2

ssh-agent -s返回一些要设置的环境变量,如下所示:

SSH_AUTH_SOCK=/tmp/ssh-OIohiYiJShSO/agent.11139; export SSH_AUTH_SOCK;
SSH_AGENT_PID=11140; export SSH_AGENT_PID;

虽然它们会延续到从 shell 启动的进程中,但它们并不适用于进程不是从那个外壳启动。当您从桌面或菜单打开新的 gnome 终端时,它不是通过该 shell 启动的,因此它不会获取环境变量。

如果您从运行的 shell 启动新终端exec `ssh-agent -s`,例如通过键入gnome-terminal &,它将继承 shell 变量并且应该可以工作。或者,您可以ssh-agent使用命令进行调用,如下所示:

ssh-agent gnome-terminal &

然后它将运行该命令并设置必要的环境变量。

答案3

如果“env | grep SSH”不好(关于缺少 SSH_AUTH_SOCK):

vi ~/.bashrc

SSH_AUTH_SOCK=`env | grep GNOME_KEYRING_SOCKET | cut -d= -f2 | sed 's/$/.ssh/g'`
[ -z "$SSH_AUTH_SOCK" ] || export SSH_AUTH_SOCK

相关内容