我在家里的电脑上的 ~/.ssh/config 中有一个条目,如下所示:
host foo bar
ProxyCommand ssh -x -a -q gateway.example.com nc %h 22
Run Code Online (Sandbox Code Playgroud)
gateway.example.com
连接到公共 Internet 和内部网络的工作服务器在哪里。网关框使用 /etc/hosts 中的条目解析 foo 和 bar。
我的问题是我需要到达foo
. 我们称之为“巴兹”。“baz”主机位于 foo 连接到的另一个专用网络上,但不是“网关”连接到的那个。
我试过用这个:
host baz
ProxyCommand ssh -x -a -q gateway/example.com ssh foo nc %h 22
Run Code Online (Sandbox Code Playgroud)
但这不起作用,我有点超出我的深度。我该怎么做呢?
我认为这不重要,但我在 Ubuntu 10 中这样做。
gho*_*oti 17
简单。
假设以下网络设置:
你应该能够使用一个看起来像这样的 ~/.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
Run Code Online (Sandbox Code Playgroud)
这里的想法是您的 SSH确实知道如何访问“foo”,因此那里的 SSH 会成功。从那里,您可以“nc”到 baz。如果在“baz”旁边的内部专用网络上还有其他主机,您可以将它们添加到“host baz”行中。
在比 5.4 更新的 OpenSSH 版本中(此时应该是所有版本),您可以使用该-W
命令而不是外部nc
命令的 exec ,当然您可以将选项打包在一起:
host foo bar
ProxyCommand ssh -xaqW%h:22 gateway.example.com
host baz
ProxyCommand ssh -xaqW%h:22 foo
Run Code Online (Sandbox Code Playgroud)
在这两种情况下,这将主机“foo”视为“baz”的网关,就像“gateway”是“foo”的网关一样。
清除?
Ric*_*man 15
关于ghti的回答:"ssh ... nc %h 22"
从OpenSSH 5.4开始,您可以直接使用:而不是使用netcat()"ssh -W %h:22 ..."
。这样,您就不必担心 netcat 是否安装在正确的位置。