如何查明是否已建立 SSH 连接(有或没有代理转发)?
我正在尝试执行以下操作:
ssh-add -D (delete all stored keys)
ssh --vvv something
ssh-add (adding key)
ssh --vvv something
并比较输出,但我只能看到细微的差异。
答案1
ForwardAgent yes
当在客户端( on )上启用 ssh 代理转发~/.ssh/config
并且在远程服务器上也启用时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$
答案2
检查环境对于SSH_AUTH_SOCK
直接 ssh 连接很有好处。
如果您使用代理 ( proxy_command
),您可能会拥有如下所示的连接:
local
-> hostA
-> hostB
-> hostC
->hostD
如果代理转发在所有这些主机上都处于活动状态,则将SSH_AUTH_SOCK
在所有主机上设置并“包含”您的 ssh 密钥local
。
现在假设代理转发已在 上禁用,hostB
但在 上启用hostC
。SSH_AUTH_SOCK
将被设置为打开hostD
,但实际上它是“空的”。当然,代理会被转发,但仅限于从hostC
到hostD
。链条断了。
现在要检查密钥是否确实可用,hostD
您只需调用ssh-add
.在任何情况下,它都会以代码 1 退出,但如果密钥不可用,它将在 上显示stderr
:
无法打开与您的身份验证代理的连接。
所以你可以检查SSH_AUTH_SOCK
加号确保ssh_add
没有输出。