我正在尝试使用 pssh 结合跳转主机和 ssh-agent 密钥转发连接到多个主机。
不幸的是,这经常失败,但是不同的主机失败了。所以这只是一个例子,下次看起来会有所不同:
~> pssh -h /tmp/hostfile -o /tmp/log -e /tmp/error/ -v uname -a
[1] 13:51:18 [FAILURE] host1 Exited with error code 255
[2] 13:51:19 [SUCCESS] host2
[3] 13:51:19 [SUCCESS] host3
[4] 13:51:19 [SUCCESS] host4
[5] 13:51:19 [SUCCESS] host5
[6] 13:51:19 [SUCCESS] host6
[7] 13:51:19 [SUCCESS] host7
….
[16] 13:51:19 [SUCCESS] host16
当有更深入的了解时,我得到
ssh_exchange_identification: Connection closed by remote host
ssh_exchange_identification: Connection closed by remote host
在失败的主机上。这看起来很像通过跳转主机的 ssh-agent 密钥转发在这种特定情况下不起作用。
在我的 ~.ssh/config 中,它看起来像这样:
ForwardAgent yes
Host *.tld.foo
User frlan
ProxyCommand ssh tld-jump-host nc %h %p
Host tld-jump-host
HostName myhost.example.com
User frlan
ProxyCommand none
通常这是有效的。现在我想知道为什么从大约 15 台主机开始有时没有转发密钥,而我可以升级我的配置以防止这种情况发生。
对于使用
ProxyCommand
您的连接,您不需要任何ssh-agent
转发。所有身份验证都是直接从您的计算机完成的。手册页
ssh_config
说因此该
Host tld-jump-host
块应该在Host *.tld.foo
块之前,特别是如果跳转框与其后面的主机具有相同的 tld。如果您要连接到此跳转框后面的许多主机,您可能会触发连接限制,并且连接将被随机拒绝。您可以尝试通过提高 jumpbox 服务器(
MaxStartups
中的选项sshd_config
)中的连接速率限制来避免它,或者通过创建目录~/.ssh/cm/
并将以下内容添加到 jumbox 块中来多路复用到跳转框的连接ssh_config
: