不必要时使用 ProxyJump 的缺点

tha*_*min 3 ssh proxy

ProxyJump在不需要时使用有什么缺点吗?

我们在许多机器之间使用共享的 .ssh/config 文件,其中一些在 jumpbox 后面,而另一些则没有。对于位于特定跳箱后面的两台机器,仍然使用该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
Run Code Online (Sandbox Code Playgroud)

但是,Match Exec检查有点脆弱,不一定在所有系统上都能正常工作。

Nik*_*nov 5

ProxyJump 本质上执行以下操作:

  1. 它连接到代理,创建一个将随机本地端口转发到目标端口(22 或为目标主机配置的任何端口)的 TCP 端口。这种联系存在于后台。
  2. 然后它连接到这个转发的端口,从而使用刚刚创建的 SSH TCP 隧道。隧道设置为连接到目标主机 SSH 端口,因此连接继续到该目标端口。

因此,SSH 连接是直接的。您可以通过它传递 TCP 隧道,正向或反向,或使用任何其他 SSH 功能。你甚至可以使用一个代理服务器作为第三个系统的代理,然后会有两个后台连接转发随机端口。

我认为它们的缺点是:

  • 对代理的依赖。如果您需要对代理本身做一些工作、重新启动它或类似的事情,所有正在运行的连接都将被终止。
  • 目标主机将连接视为从代理完成的。连接系统的真实地址是完全隐藏的。支持这种安全性的负担在于代理。此外,如果目标主机有一些像 fail2ban 一样运行的自动禁止服务,并且如果代理连接成功,但目标没有成功,该服务最终可能会阻止来自代理的任何连接。不是很方便!

这两个缺点都是使用代理的必要权衡,但有时,当主机可直接访问时,可能会出乎意料(即,当您认为是直接连接时)。