dynamic生成〜/ .ssh / config中的SSH主机条目

我必须通过sshpipe理整个主机。 不过,我只能通过某个网关的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 

我知道你可以在Hostname参数中使用%h ,但是这将是主机名。 我真正需要的是某种stringreplace,比如bash的${VAR%thingie} 。 这可能吗?

这可以通过以下SSHconfiguration文件完成:

 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 

您为右半部分select的名字应该由跳转主机解决。

如果您需要手动映射到不同types的主机上的不同用户,则指定User参数。 ControlMaster和ControlPath被指定为允许SSH连接重用。

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

只需尝试:

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

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

我有一个类似的问题,最后写了一个脚本,为我生成所有的样板。 我不再改变〜/ ssh / config,我改变〜/ ssh / config.in并重新运行我的脚本。

我有一个客户端设置相同,我用DSSH来解决我的问题。
除此之外,DSSH允许您通过网关主机透明地login到远程主机。

用例

  • 从需要“ena”login的Cisco路由器收集configuration参数
  • login到服务器,该服务器的PermitRootLogin直接以root身份(通过自动inputsu – 和密码)被禁用,同时保留退出状态
  • 添加高级日志等自定义逻辑
  • 通过几个连接隧道到达目标服务器