ProxyJump
在没有必要的情况下使用有什么缺点吗?
我们在许多机器之间使用共享的 .ssh/config 文件,其中一些机器位于跳转箱后面,而其他机器则不在。对于位于特定跳转箱后面的两台机器,继续使用该ProxyJump
选项是否有缺点?(我猜会有难以察觉的额外延迟,但仅此而已)。
现在我们的共享配置使用此设置仅ProxyJump
在需要时使用:
Match Host example Exec "! nslookup $(nslookup internal.site.com | head -1 | grep -o '[0-9]\+\([.][0-9]\+\)\{3\}') | grep -o 'name = .\+site.com\.$'"
ProxyJump jumpbox
Host example
HostName example.internal.site.com
然而,这种Match Exec
检查有点脆弱,并不一定能在所有系统上正常工作。
答案1
ProxyJump 本质上执行以下操作:
- 它连接到代理人,创建一个从随机本地端口到目标端口(22 或为目标主机配置的任何端口)的 TCP 端口转发。此连接在后台运行。
- 然后它连接到这个转发端口,从而使用刚刚创建的 SSH TCP 隧道。隧道设置为连接到目标主机 SSH 端口,因此连接继续到该目标端口。
因此,SSH 连接是直接的。您可以通过它传递 TCP 隧道、转发或反向,或使用任何其他 SSH 功能。您甚至可以使用代理服务器作为第三个系统的代理,然后会有两个后台连接转发随机端口。
我认为它们的缺点是:
- 对代理的依赖。如果您需要在代理本身上执行某些操作、重新启动代理或执行类似操作,则所有正在运行的连接都将被终止。
- 目标主机将连接视为通过代理完成的。连接系统的真实地址完全隐藏。支持此安全性的负担落在代理上。此外,如果目标主机运行某些自动禁止服务(如 fail2ban),并且如果代理连接成功,但目标连接失败,则该服务最终可能会阻止来自代理的任何连接。不太方便!
这两个缺点都是使用代理的必要权衡,但有时,当可以直接访问主机时,可能会出现意外(即当您认为您正在直接连接时)。