Answers:
如果在客户端()ForwardAgent yes
上启用了ssh代理转发,~/.ssh/config
并且在远程服务器上也启用了ssh代理转发AllowAgentForwarding yes
,则在登录到远程服务器时,环境变量SSH_AUTH_SOCK
应该存在。然后,如果您登录另一台服务器(您的公钥必须位于该第三台服务器上),则不会提示您输入任何密码。
澄清:
home$ ssh-add
Enter passphrase ...
Identity added ...
$ ssh hostA
hostA$ env | grep SSH_AUTH_SOCK
SSH_AUTH_SOCK=/tmp/...
$ ssh hostB
hostB$
ssh-add
就是我的把戏。我已经工作了几个月了,对此一无所知。然后,我将桌面从Unity切换到LXDE,并且代理密钥转发停止工作。
ssh-add
每次打开新的控制台窗口时都必须运行。因此,我将该命令行添加到的末尾~/.bash_profile
,现在身份验证代理转发每次都可以透明地工作!
ssh-agent
正确设置。参见mah.everybody.org/docs/ssh
"${SSH_AUTH_SOCK}"
是一个插座,你可以测试它if [[ ! -S "${SSH_AUTH_SOCK}" ]]; then echo "warn: no forward agent detected ('${SSH_AUTH_SOCK}' is not a socket)"; fi
检查环境SSH_AUTH_SOCK
是否适合直接ssh连接。
如果您使用代理(proxy_command
),则可能会出现如下连接:
local
-> hostA
-> hostB
-> hostC
->hostD
如果代理转发在所有这些主机上均处于活动状态,SSH_AUTH_SOCK
则将进行设置并“包含” local
所有主机上的ssh密钥。
现在,假设代理转发已禁用,hostB
但已启用hostC
。SSH_AUTH_SOCK
将设置为开,hostD
但实际上为“空”。当然,代理转发,但只能从hostC
到hostD
。链条坏了。
现在,hostD
只需调用即可检查密钥是否确实可用ssh-add
。无论如何,它将以代码1退出,但是如果密钥不可用,它将显示在stderr
:
无法打开与身份验证代理的连接。
因此,您可以检查SSH_AUTH_SOCK
加号,确保ssh_add
没有输出。
ssh-find-agent
用于查找和使用现有ssh-agent 的脚本,非常方便!该自述文件中有一些示例。您可能能够检测到是否像这样启用了ssh-agent,并且可以检查SSH配置文件,而不用查看SSH输出。