仅将匹配关键字应用于 ssh 配置中的单个主机

仅将匹配关键字应用于 ssh 配置中的单个主机

我有一个可以通过 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”的主机,匹配立即失败并移至下一个MatchHost关键字(如果有)。仅当主机是“target_host”时才会执行执行。然后该语句的真实性将决定是否调用 ProxyCommand。

要查看逻辑发生情况,请使用 -vvv 运行。您应该在 debug3 中看到一些匹配检查。

相关内容