在 ~/.ssh/config 中动态生成 SSH 主机条目

在 ~/.ssh/config 中动态生成 SSH 主机条目

我必须通过 ssh 管理一大堆主机。但是我只能通过某个网关 ssh 服务器访问它们。

我的 中有以下内容~/.ssh/config

Host mygateway-www
Hostname www
IdentityFile ~/.ssh/id_rsa
ProxyCommand ssh mygateway nc %h 22

但是我必须连接很多这样的机器。除了在我的 中放入几十个条目之外~/.ssh/config,我是否能有如下方法:

Host mygateway-*
Hostname ???WHAT GOES HERE????
IdentityFile ~/.ssh/id_rsa
ProxyCommand ssh mygateway nc %h 22

%h我知道您可以在参数中使用Hostname,但那将是主机名。我真正需要的是某种字符串替换,就像 bash 的${VAR%thingie}。这可能吗?

答案1

可以使用以下 SSH 配置文件完成此操作:

Host *
  ServerAliveInterval 120

Host gateway.somewhere.com
  User jdoe

Host gateway+*
  User jdoe
  ProxyCommand ssh -T -a $(echo %h |cut -d+ -f1).somewhere.com nc $(echo %h |cut -d+ -f2) %p 2>/dev/null
  ControlMaster auto
  ControlPath ~/.ssh/ssh-control_%r@%h:%p

然后,您可以像这样访问您的内部主机:

ssh gateway+internalhost01.somewhere.com
ssh gateway+internalhost02.somewhere.com

您为右半部分选择的名称应该可以被跳转主机解析。

如果您需要手动映射到不同类别主机上的不同用户,请指定 User 参数。指定 ControlMaster 和 ControlPath 以允许重复使用 SSH 连接。

答案2

您不需要手动指定 HostName,因为它来自命令行。

只需尝试:

Host *.domain  
  IdentityFile ~/.ssh/id_rsa  
  ProxyCommand ssh mygateway /usr/bin/nc %h 22

答案3

忽略通过声明直接指定覆盖主机名Hostname,而是在运行时确定它。通过将其作为 的一部分进行评估来执行此操作ProxyCommand,使用%h在命令中引用它(也使用%p而不是将端口硬编码为 22),即

Host mygateway-*
   #Hostname ???WHAT GOES HERE????
   IdentityFile ~/.ssh/id_rsa
   ProxyCommand ssh mygateway nc $(echo %h|sed 's/^mygateway-//') %p

人们甚至可以有一个更通用的节,借此您可以指定任何主机,而不用仅仅-按原样处理,或者按照另一个匹配的节处理,但是有一个通用的-方法来指定任何<gateway>-<target>

Host *-*
   # Assume LHS of "-" is GW and RHS of "-" is target host
   IdentityFile ~/.ssh/id_rsa
   ProxyCommand ssh $(echo %h|cut -d - -f1) nc $(echo %h|cut -d - -f2-) %p

此外,较新版本的 SSH 客户端支持[-W host:port]直接执行与(netcat)相同功能的选项nc。因此,我们可以使用修改后的:

Host *-*
   # Assume LHS of "-" is GW and RHS of "-" is target host
   IdentityFile ~/.ssh/id_rsa
   ProxyCommand ssh -W $(echo %h|cut -d - -f2-):%p $(echo %h|cut -d - -f1)

当然,如果你确实有一个有限的主机列表,你总是可以这样做:

Host host1 host2 host3 hostN
   IdentityFile ~/.ssh/id_rsa
   ProxyCommand ssh mygateway nc %h %p

希望这可以帮助!

答案4

看起来好像没有办法做到这一点。

相关内容