SSH ProxyCommand 一台主机到达另一台主机

SSH ProxyCommand 一台主机到达另一台主机

在我们的 ENV 中,我们有 2 个 Jumphost 服务器,我们尝试在远程服务器上登录并运行 ssh 命令,在 sshproxy 的帮助下,每个位置都有 ssh/confg 文件,我们进入 Jump2 服务器。我们想要合并配置文件,以便我们可以同时访问所有位置服务器。

请参阅下面 ENV
笔记本电脑--------> Jumphost1 ---------> Jumphost2--------->远程服务器

实际上,我们计划从本地计算机运行脚本并将输出存储在本地。因此,为了归档此任务,我们需要 ssh 到 2 个跳转主机并在远程服务器上运行以下命令,这将从本地计算机运行脚本并在本地计算机本身上获取输出。

Jump1 可通过 2222 端口访问,用户将是同一用户

但要访问远程服务器,有一个不同的用户1

ssh user1@ip < ./script >> file.txt &&

设置你的~/.ssh/config:

主机跳转1 用户jump1user 端口2222 主机跳转2 ProxyCommand ssh -W %h:%p 跳转1 用户jump2user 主机RemoveServer ProxyCommand ssh -W %h:%p 跳转2 用户remoteUser

通过上面的文件,我们可以直接登录jump2服务器,没有任何问题。但我们每次都必须为每个位置更改配置文件。

为了在脚本中运行下面的示例 ssh 命令以从每个区域收集信息,我们需要一个配置文件。

例子

ssh jump2 | ssh user1@remoteserver-ip < ./script >> file.txt &&

答案1

我希望这个例子能让您只使用一个文件:

Host *
    User username
    IdentityFile /home/username/.ssh/identity

Host some*
    ProxyCommand /usr/bin/ssh -p 2222 username@jumphost /usr/bin/nc %h %p 2> /dev/null

Host other*
    ProxyCommand /usr/bin/ssh -p 2222 username@otherjumphost /usr/bin/nc %h %p 2> /dev/null

Host something
    HostName 1.2.3.4

Host somethingelse
    HostName 2.3.4.5

Host otherthing
    HostName 3.4.5.6

答案2

Host remotehost
    ProxyCommand /usr/bin/ssh -p 2222 username@jumphost /usr/bin/nc %h %p 2> /dev/null

正如您所描述的,由于跳转主机只能在端口 2222 上访问,因此您需要将该事实告知代理 SSH 连接。

作为对问题的进一步编辑已澄清,实际上有您将通过其进行代理的主机,这会变得有点复杂,但也只是稍微复杂一点。鉴于:

  • local.example.com- 您直接工作的主机
  • jump1.example.com- 您直接连接的主机local
  • jump2.example.com- 您直接连接的主机jump1
  • endpoint.example.com- 您最终要连接的主机

在 上local.example.com,将以下内容添加到您的 SSH 配置中:

host endpoint.example.com
    ProxyCommand /usr/bin/ssh -p 2222 [email protected] /usr/bin/nc %h %p 2> /dev/null

在 上jump1.example.com,将以下内容添加到您的 SSH 配置中:

host endpoint.example.com
    ProxyCommand /user/bin/ssh -p 2222 [email protected] /usr/bin/nc %h %p 2> /dev/null

您现在可以通过两个代理进行访问。ssh [email protected]local.example.com

相关内容