之后:
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-add
并ssh
参考几个环境变量来查找要与之通信的 SSH 代理:SSH_AGENT_PID
和SSH_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