这是一个有点长远的目标,但是,如果连接失败,则获取 ssh 的最佳方式是什么,运行命令,然后重试连接。
为了分享我的用例,我通过 ssh 隧道访问防火墙后面的计算机,这意味着我的 ~/.ssh/config 中的内容为:
Host tunnel
HostName 192.168.1.27
Host target
HostName localhost
Port 2003
为了使其ssh target
工作,我首先需要ssh -N -L 2003:localhost:22 tunnel
在后台执行。我决定使用一个命令来执行此操作:screen -d -m ssh -N -L 2003:localhost:22 tunnel
。
当失败时运行该命令并不太烦人ssh target
,但如果 ssh 可以在连接失败时以某种方式自动运行它,那就太好了。
答案1
比隧道更好的解决方案是使用 ProxyCommand,如下所述:通过中间机转发 SSH 流量
为了符合您的用例:
Host tunnel
HostName 192.168.1.27
Host target
HostName localhost
Port 2003
ProxyCommand ssh tunnel -W %h:%p
或者
ProxyCommand ssh tunnel nc %h %p
然后,你就可以ssh target
自己做所有事了。