第一次匹配时停止ssh配置


18

我在.ssh配置中为所有主机添加了本地代理,但是我想在不使用proxy命令的情况下安装到本地vm中。我的ssh尝试的输出:

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

给定以下ssh config,如何防止将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

Answers:


22

您可以使用以下命令从ProxyCommand中排除local.dev !

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

ssh_config文档中:

如果提供了多个模式,则应将其用空格分隔。

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

该文档还说:

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

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

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

8

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

解决此问题的方法有两种:

  • 对于您不想使用proxy命令的主机,只需添加以下行
    ProxyCommand无
  • 对于该*条目,请特别注意,该条目不适用于主机local.dev,只需将其与!
    主机!local.dev *

分隔多个主机使用空间。逗号(,)对我不起作用。发行者ID:Ubuntu说明:Ubuntu 17.10版本:17.10代号:artful
Aruna

感谢@ArunaFromLK-我不敢相信我会错过它,而且在3.5年内没有其他人发现它!我已经更新了答案。
珍妮·D
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.