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


10

我有多个笔记本电脑和工作站,它们从中央服务器上的多个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是最正确的解决方案)

Answers:


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

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

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

猜猜我将编写一个脚本来修改HostName条目。谢谢。
leoluk 2012年

这看起来是特定于Linux的。例如,/ sbin / iwgetid在WSL下似乎不存在……
Michael

-1

另一种选择是设置脚本以将“正确” ip的ssh端口22转发到笔记本电脑的一些未使用的本地端口,然后在该处ssh。我在很多情况下都使用它。


1
没有一个例子,这一点是不清楚的。
安德鲁·舒尔曼
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.