通过两个 ssh 跃点运行命令

通过两个 ssh 跃点运行命令

下列的AWS 最佳实践我已经建立了一个基础设施,可以通过堡垒机 ssh 访问:

localhost → bastion → target server

为了连接到目标服务器,我在本地主机和堡垒盒上有密钥文件,然后我使用 ssh 进行跳跃,如下所示:

localhost > ssh -i key.pem bastion
bastion > ssh -i key.pem target

看起来像这个问题相关的。如何直接从本地主机在目标服务器上执行命令?

答案1

您需要在 SSH 配置中使用 ProxyCommand。所以,如果你还没有设置你的~/.ssh/config,我会参考这里

所以你会想要执行以下操作:

  1. 将堡垒作为转发代理放置在 SSH 配置中。

  2. 使用 ProxyCommand 代理从堡垒到目标服务器的连接。

这是一个简单的例子:

Host <bastion>
    ForwardAgent yes

Host <target_server>
        User <user>
        Hostname <Ip/Hostname>
        ProxyCommand ssh -q -W %h:%p <user>@<bastion> nc 2> /dev/null
        IdentityFile ~/.ssh/id_rsa

答案2

从命令行,我使用以下命令执行远程命令,例如top在目标系统上运行。

$ ssh -qt bastion "ssh -qt target \"top\"\"

这甚至可以与特定用户一起使用sudosudo su - user作为特定用户运行。

$ ssh -qt bastion "ssh -qt target \"sudo su - user1 -c 'ls -l'\""

以下是ssh示例中的选项的作用。

  • ssh -q= 安静,抑制来自服务器的横幅以最大程度地减少干扰。
  • ssh -t= 终端,强制分配伪终端,以便面向终端的命令(例如top和 )sudo将接受交互式会话。

相关内容