我知道至少有 3 种ssh
配置变体jump_host
可以连接到target_host
:
Host jump_host
HostName 1.2.3.4
# Variant - 1
Host target_host
HostName 172.16.0.1
ProxyCommand ssh -q -x jump_host 'netcat %h 22'
# Variant - 2
Host target_host
HostName 172.16.0.1
ProxyCommand ssh -q -x jump_host -W '%h:22'
# Variant - 3
Host target_host
HostName 172.16.0.1
ProxyJump jump_host
这些方法中的任何一种是否比其他方法更好?配置 2 和 3 之间有什么区别(如果有的话)?显然配置 1 需要netcat
手头,所以它最不吸引人。
变体 1 将进行两次身份验证。一次使用 proxycommand 建立连接,然后再次使用原始 ssh 命令。您也可以简单地制作 Varient 1
netcat %h %p
并使用 Host 参数来完成您想要从 ssh 命令中完成的相同操作。然而,即使这样,它也需要一个 pty 来支持 netcat 和一个额外的进程作为连接的一部分。
变体 2 与 netcat 执行相同的操作,但在内部并且不分配 pty,尽管如果需要,可以将其重写为与变体 1 完全相同。它还可以防止在 jumphost 上进行任何设置,例如代理转发。
变体 1 和 2 使用 ProxyCommand 作为一种通用方式来自动设置连接。之所以存在这些变体,主要是因为 ProxyJump 只存在于它之后。但是 ProxyCommand 可用于通过连接设置执行更高级的操作。该文档引用了使用它来设置 HTTP CONNECT 代理以转发您的连接的示例。
变体 3 使用 ProxyJump,它本质上是一个内置的 TCP 代理,与变体 2 最相似,但允许更简单和更严格的链式庄园。没有它做同样的事情会是这样的:
但是使用 ProxyJump 看起来像这样: