单个命令代理 SSH 到服务器(将两个私钥保存在本地计算机上):

单个命令代理 SSH 到服务器(将两个私钥保存在本地计算机上):

我家里的计算机上的 ~/.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 跳转示意图

.ssh/config建造

Host gw
  ProxyCommand ssh -A -W %h:%p toolbox

Host github.com
  ProxyCommand ssh -A -W %h:%p gw

解释。

  1. 观点来自建造. 其他服务器暂无配置。
  2. 首先,我声明,为了网关你需要通过工具箱
  3. 第二,我声明,为了github.com,你需要通过网关。SSH 内部使用前面的规则。
  4. 最终,成功了!git clone [email protected]:aRepo/There

清除?

相关内容