我有多个笔记本和工作站,它们从中央服务器上的多个 Mercurial 存储库中拉取和推送数据。我通常用来.ssh/config
设置别名:
Host repo-server
HostName server.somedomain
User user143
IdentityOnly yes
IdentityFile ~/hgkey
Port 156
... 还有一些选项,您明白了。然后我可以简单地hg push ssh://repo-server//hgroot/someproject
在每个本地存储库上执行,并且可以在一个地方更改服务器地址和端口。
对于工作站来说,这很好,但笔记本电脑可以使用不同的地址和不同的端口从网络内部或外部访问服务器。有什么方法可以指定多个 HostName/Port 组合,以便 SSH 自动按顺序尝试它们?这样,用户可以推送和拉取,而不必关心正确的地址。
(当然使用VPN才是最正确的解决方案)
答案1
恐怕 SSH 无法做到这一点。
您可以使用ProxyCommand
ssh 选项以及创建到服务器的 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
答案2
另一种方法是设置一个脚本,将“正确” IP 的 ssh 端口 22 转发到笔记本电脑上某个未使用的本地端口,然后在那里进行 ssh。我在很多情况下都使用它。