ProxyJump 简介
ProxyJump 是 SSH 配置中的选项,允许你通过中间服务器(也称为跳板机或网关服务器)连接到目标机器。这在概念上类似于 SSH 代理转发,因为它们都涉及间接连接,但它们的目的不同。
1. ProxyJump(现代 SSH 推荐的方式)
ProxyJump 是一个简化的方式,用来定义一个跳板机(中间代理服务器),它位于你的本地机器和目标机器之间。这个功能允许你通过一个代理服务器安全地“跳转”到目标服务器,而无需先手动SSH到代理服务器再连接到目标服务器。
示例用例:
你需要SSH连接到一个私有服务器(internal-server),但这个服务器不能直接访问。然而,你可以通过一个公共跳板机(jumphost)来访问私有服务器。
~/.ssh/config 中的配置示例:
Host internal-serverHostName internal-server.private.comUser internaluserProxyJump jumphost
在这种情况下:
• 当你执行 ssh internal-server 时,SSH 会自动先连接到 jumphost,然后通过它代理连接到internal-server。
命令行等效方式:
你也可以不编辑 ~/.ssh/config,而是直接在命令行中使用 -J 选项:
ssh -J jumphost internaluser@internal-server.private.com
ProxyJump 有效地简化了通过中间服务器的SSH连接,但不会像SSH代理转发那样转发你的SSH密钥。你只是使用中间服务器作为网络代理,来建立到最终目标的连接。
- ProxyCommand(旧的更灵活的替代方案)
在引入 ProxyJump 之前,ProxyCommand 被用来定义自定义命令,以便通过代理服务器建立连接。虽然它更加灵活,但相比 ProxyJump 复杂一些。
示例用例:
Host internal-serverHostName internal-server.private.comUser internaluserProxyCommand ssh -W %h:%p jumphost
这里,%h 和 %p 是目标主机和端口的占位符(在此例中是 internal-server.private.com 和端口 22)。这个配置告诉SSH首先连接到jumphost,然后使用 -W 选项将流量从 jumphost 转发到目标服务器(internal-server)。
虽然 ProxyCommand 提供了灵活性(你可以使用它与非 SSH 代理,比如 nc 结合使用),但在现代 SSH 中,大多数场景已经被 ProxyJump 取代,因为 ProxyJump 对于典型的 SSH-to-SSH 连接更简单。
与 SSH 代理转发的差异
• ProxyJump/ProxyCommand 的用途: 这些选项允许你通过代理服务器(跳板机)路由你的SSH连接。它们不会转发SSH密钥,而是处理网络级别的路由,以访问无法直接访问的内部主机。
• SSH 代理转发的用途: SSH代理转发将本地SSH密钥转发到远程服务器,这样当你连接到中间服务器时,你不需要将私钥复制到中间服务器。远程服务器可以通过与运行在本地机器上的SSH代理通信来验证你的身份。
何时使用各自功能:
• 使用 ProxyJump 或 ProxyCommand 当你需要通过中间服务器(跳板机)路由流量以访问目标服务器时。这在你的目标服务器处于私有网络或防火墙之后时特别有用,并且只能通过跳板机访问。
• 使用 SSH 代理转发 当你需要在不复制私钥到中间服务器的情况下对多个服务器进行认证时。例如,如果你通过SSH连接到跳板机,然后需要通过跳板机再SSH连接到其他服务器,并且需要使用本地的SSH密钥。
结合SSH代理转发和ProxyJump
你可以结合使用SSH代理转发和ProxyJump,通过跳板机安全地连接多个远程机器,并使用本地的SSH密钥进行身份验证。
配置示例:
Host jumphostHostName jumphost.example.comUser jumpuserForwardAgent yes # 启用SSH代理转发Host internal-serverHostName internal-server.private.comUser internaluserProxyJump jumphost
通过这个设置:
- 你通过 jumphost 连接到 internal-server。
- SSH 代理转发会允许 internal-server 使用你本地的SSH密钥进行身份验证,即使你是通过跳板机进行路由的。
总结:
• ProxyJump 是通过跳板机(代理服务器)连接目标服务器的简化现代方式。
• ProxyCommand 提供更多的灵活性,适用于更复杂的代理设置,但相比 ProxyJump 复杂一些。
• SSH 代理转发 允许你在远程服务器上使用本地SSH密钥,而 ProxyJump 和 ProxyCommand 则处理通过中间服务器的路由。
可以结合使用这两者,以实现多跳SSH连接的安全路由和密钥转发。
