如何在命令行中跳过两个跳转主机

时间:2018-03-18 14:39:24

标签: ssh

我无法通过ssh one liner获得连接链。

链: 我的电脑 - > jumphost - >堡垒 - >我的app X主机(与Bastion共享子网)

-Jumphost期待私钥A

-Bastion和X主机都期望私钥B

my pc> ssh -i /path_to_priv_key_for_X/id_rsa -o StrictHostKeyChecking=no -o 
"ProxyCommand ssh -p 22 -W %h:%p -o \"ProxyCommand ssh -p 24 -W %h:%p 
-i /path_to_key_jump/id_rsa jumphostuser@jumphostdomain\"     -i 
/path_to_bastion_key/id_rsa bastionuser@ip_to_bastion" myappuser@subnet_ip

上面不起作用,但是

ssh -i  /path_to_bastion_key/id_rsa -o "ProxyCommand ssh -p 24 -W 
%h:%p -i /path_to_key_jump/id_rsa jumphostuser@jumphostdomain" 
bastionuser@ip_to_bastion

有效,所以我可以通过一个班轮访问堡垒,但在命令链中添加app x主机不起作用,不知道为什么?

我可以像这样一步一步手动访问myapp X主机

mypc> ssh -p 24 -i path_to_key_jump/id_rsa jumphostuser@jumphostdomain
jumphost> ssh -i /path_to_bastion_key/id_rsa bastionuser@ip_to_bastion
bastion> ssh myappuser@subnet_ip
myapp>

如何在两个跳转主机上进行命令行两跳,两个跳转主机都需要不带ssh配置的不同密钥?

1 个答案:

答案 0 :(得分:1)

使用-J选项的ssh可以为我很好地工作:

 -J destination
         Connect to the target host by first making a ssh connection
to the jump host described by destination and then establishing a TCP
forwarding to the ultimate destination from there. 

事实上,我是关于它的功能,但我很长时间没有意识到:

Multiple jump hops may be specified separated by comma characters.

因此,像PC -> jump server 1 -> jump server 2 -> target server这样的多跳操作(在我的示例中:PC -> vpn -> vnc -> ece server可以用一个组合完成:

$ ssh -J vpn,scs694@tr200vnc rms@tr001tbece11

当然,最方便的是使用ssh键来打开无pwd的连接(PC->vpnvpn -> vncvnc -> target

我希望它会有所帮助, Jarek