我在家里的电脑上有一个〜/ .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代理连接来进一步危害主机,就像劫机者拥有私钥一样)。
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