我必须通过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到远程主机。
用例