我在 .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 *