我曾经考虑过使用 SSH 代理服务器,或者说 Jump Host,用它来连接我所有的“隐”服务器。基本上我有以下设置。请注意,我在这里故意使用 IP 地址而不是主机名。
<client> ---> <proxy_ssh> ---> <192.168.0.*>
我的目的是让它对用户尽可能透明。因此理想情况下,用户只需执行以下命令
# ssh [email protected]
为了实现这个功能我创建了以下内容.ssh/config
。
Host *
ServerAliveInterval 240
Compression yes
ForwardAgent yes
ForwardX11 yes
Host 192.168.0.*
ProxyCommand ssh my_user@proxy_ssh.example.com netcat -w 120 %h %p
这很好用。但如果我的服务器后面有更多网络可以使用,那就有点乏味了proxy_ssh
。所以我尝试简单地将添加到没有起作用的部分ProxyCommand
。Host *
我想让这对最终用户更加透明,并将 ssh 配置更改为以下内容,只省略特定的主机定义。
Host *
ServerAliveInterval 240
Compression yes
ForwardAgent yes
ForwardX11 yes
ProxyCommand ssh my_user@proxy_ssh.example.com netcat -w 120 %h %p
这导致我无法再连接到终端主机。连接超时了!
所以我的问题是,有没有办法让它更加透明,以便我的所有 SSH 连接都可以使用主机proxy_ssh
?
答案1
上述示例将使其递归,即每个连接都将使用代理命令,该命令再次使用 ssh 和另一个代理命令。对代理执行 DOS 的好方法。
您应该从列表中排除代理,用来-F /dev/null
忽略代理命令的配置,或者只是忽略代理 ssh 的代理命令:
ProxyCommand ssh -oProxyCommand=none my_user@proxy_ssh.example.com netcat -w 120 %h %p
答案2
为跳转主机的配置添加一个条目来覆盖代理命令:
Host proxy_ssh.example.com
ProxyCommand none
否则它将尝试使用代理命令到达跳转主机本身。