如何在.ssh / config中指定多个主机名/端口组合

我有多个笔记本电脑和工作站,从中央服务器上的多个Mercurial存储库中进行推送和推送。 我通常使用.ssh/config来设置别名:

 Host repo-server HostName server.somedomain User user143 IdentityOnly yes IdentityFile ~/hgkey Port 156 

…和更多的select,你明白了。 然后,我可以简单地在每个本地存储库上执行hg push ssh://repo-server//hgroot/someproject ,并且可以在一个地方更改服务器地址和端口。

对于工作站来说,这可以正常工作,但笔记本可以使用不同的地址和不同的端口从networking内部或外部访问服务器。 有什么办法可以指定多个主机名/端口组合,以便SSH自动按顺序尝试它们? 这样,用户可以推拉,而不必关心正确的地址。

(当然,使用VPN将是最正确的解决scheme)

恐怕用SSH不可能。

你可以使用ssh的ProxyCommand选项来解决这个问题,还可以使用自定义脚本来创build一个到服务器的TCP连接(使用netcat),具体取决于笔记本的连接方式。 有些东西是:

 #!/bin/bash SSID=$(/sbin/iwgetid wlan0 -r) case "$SSID" in net1) nc <host1> <port1> ;; net2) nc <host2> <port2> ;; *) nc <host3> <port3> ;; esac 

然后,在您的.ssh/config ,您将需要以下内容:

 Host repo-server User user143 IdentityOnly yes IdentityFile ~/hgkey ProxyCommand path-to-script 

另一种方法是设置一个脚本来将“右”ip的ssh端口22转发到笔记本电脑的一个未使用的本地端口,然后在那里ssh。 我在相当多的情况下使用它。