![当特定 ssh 配置连接失败时运行命令](https://linux22.com/image/1459116/%E5%BD%93%E7%89%B9%E5%AE%9A%20ssh%20%E9%85%8D%E7%BD%AE%E8%BF%9E%E6%8E%A5%E5%A4%B1%E8%B4%A5%E6%97%B6%E8%BF%90%E8%A1%8C%E5%91%BD%E4%BB%A4.png)
这是一个有点长远的目标,但是,如果连接失败,则获取 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
自己做所有事了。