在我们的 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