我在我的 .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)
配置文件中的一个选项在第一次匹配时应用。由于主机条目中没有任何 ProxyCommand,因此*
将使用条目中的一个。
有两种方法可以解决这个问题:
ProxyCommand 无
*
条目,请特别注意该条目不应local.dev
通过使用否定来应用于主机!
主机 !local.dev *