SSH通过使用ProxyCommand的多个主机?

我在家里的电脑上有一个〜/ .ssh / config的项目,如下所示:

host foo bar ProxyCommand ssh -x -a -q gateway.example.com nc %h 22 

其中gateway.example.com是一个连接到公共互联网和内部networking的服务器。 网关盒使用/ etc / hosts中的条目来parsingfoo和bar。

我的问题是我需要到达foo另一边的盒子。 我们称之为“baz”。 “baz”主机位于foo所连接的另一个专用networking上,但不是“网关”所连接的那个。

我试过使用这个:

 host baz ProxyCommand ssh -x -a -q gateway/example.com ssh foo nc %h 22 

但是这并不奏效,而且我有点不在乎自己的深度。 我如何做到这一点?

我不认为这是重要的,但我在Ubuntu 10中这样做。

简单。

假设以下networking设置:

示例网络设置

你应该可以使用如下所示的〜/ .ssh / config文件:

 host foo bar ProxyCommand ssh -x -a -q gateway.example.com nc %h 22 host baz ProxyCommand ssh -x -a -q foo nc %h 22 

这里的想法是,你的SSH 确实知道如何去“富”,所以SSH将成功。 从那里,你可以“数字”巴兹。 如果在“baz”旁边的内部专用networking上还有其他主机,则可以将它们添加到“host baz”行。

这基本上把主机“foo”当作通向“baz”的通道,就像“通道”是通往“foo”的通道一样。

明确?

关于ghoti的回答:不要使用netcat( "ssh ... nc %h 22" ),从OpenSSH 5.4开始,你可以直接使用: "ssh -W %h:22 ..." 。 这样,您就不用担心netcat是否安装在正确的位置。

[注:似乎没有办法评论ghoti的答案,只是张贴我自己的另一个? 这很混乱。 我错过了什么?]

使用存储在本地计算机上的私钥,input此命令,并将私钥path,shell用户名和主机名/ IP地址更改为local-> gateway->目标ssh的需要。

请注意,代理指令优于代理转发,以便在网关/跳线盒被root-劫持时,降低危及私钥身份validation的风险(使用网关和本地ssh代理连接来进一步危害主机,就像劫机者拥有私钥一样)。

单一命令将SSH代理服务器(在本地计算机上保留私钥):

 sudo ssh -i dest_private_key.pem -o "ProxyCommand ssh -W %h:%p -i gate_private_key.pem gate_user@gate_IP" dest_user@dest_IP