我家里的计算机上的 ~/.ssh/config 中有一个如下所示的条目:
host foo bar
ProxyCommand ssh -x -a -q gateway.example.com nc %h 22
其中gateway.example.com
是工作中的一台服务器,它同时连接到公共互联网和内部网络。网关盒使用 /etc/hosts 中的条目解析 foo 和 bar。
我的问题是我需要访问 另一侧的盒子foo
。我们将其称为“baz”。“baz”主机位于 foo 连接的另一个私有网络上,但不位于“gateway”连接的网络上。
我尝试过使用这个:
host baz
ProxyCommand ssh -x -a -q gateway/example.com ssh foo nc %h 22
但那不管用,我有点不知所措。我该怎么做?
我认为这并不重要,但我在 Ubuntu 10 中这样做。
答案1
简单的。
假设网络设置如下:
您应该能够使用如下所示的 ~/.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做知道如何到达“foo”,因此 SSH 将会成功。然后从那里,您可以“nc”到 baz。如果内部私有网络上除了“baz”之外还有其他主机,您只需将它们添加到“host baz”行即可。
在比 5.4 更新的 OpenSSH 版本中(目前所有版本都应该是这个版本),您可以使用命令-W
而不是 exec 来执行外部nc
命令,当然您也可以将选项打包在一起:
host foo bar
ProxyCommand ssh -xaqW%h:22 gateway.example.com
host baz
ProxyCommand ssh -xaqW%h:22 foo
在这两种情况下,都会将主机“foo”视为“baz”的网关,就像“gateway”是“foo”的网关一样。
清除?
答案2
"ssh ... nc %h 22"
关于 ghoti 的回答:从 OpenSSH 5.4 开始,您可以直接使用以下命令执行此操作,而不是使用 netcat ( ) "ssh -W %h:22 ..."
。这样,您就不必担心 netcat 是否安装在正确的位置。
答案3
使用存储在本地计算机上的私钥,输入此命令,并将私钥路径、shell 用户名和主机名/IP 地址更改为本地->网关->目标 ssh 的需求。
请注意,当网关/跳线盒被根劫持时,ProxyCommand 优于 Agent Forwarding,可以减轻危及私钥认证的风险(使用网关和本地 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
答案4
这就是我从受保护的网络跳转到互联网所做的事情。
我正在使用我的笔记本电脑来处理代码建造。 自从建造无法访问互联网,要从 github.com 克隆 repo,我首先需要进入工具箱,也无法访问互联网。但它可以访问网关,有互联网。
像这样:
我.ssh/config
的建造:
Host gw
ProxyCommand ssh -A -W %h:%p toolbox
Host github.com
ProxyCommand ssh -A -W %h:%p gw
解释。
- 观点来自建造. 其他服务器暂无配置。
- 首先,我声明,为了网关你需要通过工具箱。
- 第二,我声明,为了github.com,你需要通过网关。SSH 内部使用前面的规则。
- 最终,成功了!
git clone [email protected]:aRepo/There
清除?