在第一次匹配时停止 ssh 配置

在第一次匹配时停止 ssh 配置

我在 .ssh 配置中为所有主机添加了本地代理,但是我想在没有代理命令的情况下进入本地虚拟机。我的 ssh 尝试的输出:

debug1: /Users/bbarbour/.ssh/config line 1: Applying options for local.dev
debug1: /Users/bbarbour/.ssh/config line 65: Applying options for *

给定以下 ssh 配置,如何防止 ProxyCommand 应用于 local.dev 条目?

Host local.dev
    HostName dev.myserver.com
    User developer
...
Host *
    ProxyCommand /usr/local/bin/corkscrew 127.0.0.1 8840 %h %p

答案1

您可以从 ProxyCommand 中排除 local.dev,!在它之前使用:

Host * !local.dev
    ProxyCommand /usr/local/bin/corkscrew 127.0.0.1 8840 %h %p

ssh_配置文档:

如果提供了多个模式,则应使用空格分隔它们。

可以通过在模式条目前加上感叹号(`!')来否定模式条目。如果匹配否定条目,则忽略主机条目,无论该行上的任何其他模式是否匹配。因此,否定匹配对于提供通配符匹配的例外很有用。

文档还说:

对于每个参数,将使用第一个获得的值。配置文件包含由“主机”规范分隔的部分,并且该部分仅适用于与规范中给出的模式之一匹配的主机。匹配的主机名是命令行上给出的主机名。

因此,您还可以通过在中定义的覆盖值来禁用 local.dev 的 ProxyCommand Host *

Host local.dev
    HostName dev.myserver.com
    User developer
    ProxyCommand none

答案2

配置文件中的选项在第一次匹配时应用。由于您的主机条目中没有任何 ProxyCommand,因此*将使用您条目中的代理命令。

有两种方法可以解决这个问题:

  • 对于不想使用代理命令的主机,只需添加以下行
    代理命令 无
  • 对于该条目,请特别注意该条目不应通过使用否定来*应用于主机local.dev!
    主机 !local.dev *

相关内容