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

Boi*_*ill 20 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 *
Run Code Online (Sandbox Code Playgroud)

鉴于以下 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
Run Code Online (Sandbox Code Playgroud)

cuo*_*glm 26

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

Host * !local.dev
    ProxyCommand /usr/local/bin/corkscrew 127.0.0.1 8840 %h %p
Run Code Online (Sandbox Code Playgroud)

来自ssh_config文档:

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

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

文档还说:

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

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

Host local.dev
    HostName dev.myserver.com
    User developer
    ProxyCommand none
Run Code Online (Sandbox Code Playgroud)


Jen*_*y D 9

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

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

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