我有一个可以通过 ssh 连接的主机。有时我在同一网络内,可以直接通过 ssh 进入该网络,有时我在同一网络外,需要使用代理。
因为通过代理服务器的 ssh 比直接连接慢得多,所以我希望设置 ssh 配置,以便尝试直接连接,如果失败则返回到代理。
目前配置如下:
Host proxy_server
User user
Port port
Hostname some_domain
Host target_host
User user
Port port
Hostname ip_addr_of_host
Match exec not_inside_network
ProxyCommand ssh -W %h:%p proxy_server
该target_host
条目是我的配置文件中的最后一个条目,但not_inside_network
会被配置文件中与不相关服务器的任何 ssh 连接调用。我怎样才能Match
只适用于这一台服务器?
答案1
Match
与 相当Host
。它不像其他选项那样作为 Host 的子集存在。
但是您可以在匹配上指定多个条件,并且它们看起来像短路 AND 一样运行。所以这应该是可能的并且对你有用:
Match host target_host exec not_inside_network
ProxyCommand ssh -W %h:%p proxy_server
每次 ssh 都会检查此规则。但对于不匹配“target_host”的主机,匹配立即失败并移至下一个Match
或Host
关键字(如果有)。仅当主机是“target_host”时才会执行执行。然后该语句的真实性将决定是否调用 ProxyCommand。
要查看逻辑发生情况,请使用 -vvv 运行。您应该在 debug3 中看到一些匹配检查。