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

leo*_*luk 11 ssh

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

Host repo-server
HostName server.somedomain
User user143
IdentityOnly yes
IdentityFile ~/hgkey
Port 156
Run Code Online (Sandbox Code Playgroud)

...还有更多选择,你懂的。然后我可以hg push ssh://repo-server//hgroot/someproject在每个本地存储库上简单地做一个,并且我可以在一个地方更改服务器地址和端口。

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

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

Oli*_*ver 5

恐怕这是不可能的 SSH。

您可以使用ProxyCommandssh 选项以及创建与服务器的 TCP 连接(使用 netcat)的自定义脚本来解决此问题,具体取决于笔记本的连接方式/位置。类似的东西:

#!/bin/bash
SSID=$(/sbin/iwgetid wlan0 -r)

case "$SSID" in
net1)
  nc <host1> <port1>
  ;;
net2)
  nc <host2> <port2>
  ;;
*)
  nc <host3> <port3>
  ;;
esac
Run Code Online (Sandbox Code Playgroud)

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

Host repo-server
  User user143
  IdentityOnly yes
  IdentityFile ~/hgkey
  ProxyCommand path-to-script
Run Code Online (Sandbox Code Playgroud)