我可以使用 ProxyCommand 通过 jumpbox/中间服务器在目标服务器上运行任意命令吗?

我可以使用 ProxyCommand 通过 jumpbox/中间服务器在目标服务器上运行任意命令吗?

在工作中,我们有许多服务器,我们只能从我们的跳箱服务器。

有时候我需要在这些服务器上执行命令。例如,如果我想df -H服务器-1,我运行这个命令:

ssh jumper@jumpbox 'ssh admin@server-1 ''dh -H'''

我们的jumpbox拥有通过 SSH 进入 的密钥server-1,并且我的本地工作站拥有通过 SSH 进入 的密钥jumpbox

为了简化这个过程,我编写了一个脚本,jumpbox.sh如下所示:

#!/usr/bin/env bash
ssh jumper@jumpbox @

然后我可以简单地运行

jumpbox.sh ssh admin@server-1 dh -H

为了实现相同的目标。有没有办法通过配置我的环境(例如通过编辑~/.ssh/config)而不是使用这个自定义脚本来实现这一点?

我已经发现A 很少文章以及一些 问题在 StackOverflow 上讨论了如何使用ProxyCommand来实现这一点,但我似乎无法让它发挥作用。

首先,手册上是这么说的ProxyCommand

指定用于连接服务器的命令。命令字符串延伸到行尾,并使用用户的shell执行。

如果我没错的话,这意味着如果我有以下配置:

Host server-1
    ProxyCommand  ssh jumper@jumpbox nc %h %p

然后在我的 shell 上执行

ssh server-1 dh -H

然后dh -H将被忽略。因此,看起来ProxyCommand有助于打开新的交互式 SSH 会话,但不能运行一次性命令。这是正确的吗?

我也不太明白nc这里的作用是什么?

总而言之,我的问题是:

有没有办法使用等配置我的环境~/.ssh/config,以便当我运行时ssh admin@server-1 dh -H,命令通过服务器运行jumpbox

答案1

是的...您可以通过 ProxyCommand 实现。从您的工作站,尝试运行“ssh admin@server-1 dh -H”..它将通过 exec ssh -q nc server-1 22 执行...因此 Proxycommnad 有助于连接客户端服务器,一旦连接,客户端 shell 将执行您从工作站发出的命令。

所以..你的〜/ .ssh / config应该有以下条目

主机服务器* ProxyCommand ssh -q jumper@jumpbox nc %h %p StrictHostKeyChecking=no

相关内容