检测 SSH 代理转发

检测 SSH 代理转发

如何查明是否已建立 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但在 上启用hostCSSH_AUTH_SOCK将被设置为打开hostD,但实际上它是“空的”。当然,代理会被转发,但仅限于从hostChostD。链条断了。

现在要检查密钥是否确实可用,hostD您只需调用ssh-add.在任何情况下,它都会以代码 1 退出,但如果密钥不可用,它将在 上显示stderr

无法打开与您的身份验证代理的连接。

所以你可以检查SSH_AUTH_SOCK加号确保ssh_add没有输出。

相关内容