You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SSH配置匹配规则异常:指定服务器被错误匹配到带代理的规则

SSH配置匹配规则异常:指定服务器被错误匹配到带代理的规则

嗨Pete,我仔细看了你的SSH配置和debug日志,问题根源其实是OpenSSH的配置匹配逻辑——它会按顺序检查每一条Host规则,只要目标服务器符合规则里的模式,就会应用该规则的配置;如果多个规则都匹配,后面的规则里的重复配置项会覆盖前面的。

你看debug日志里明确显示三个规则都匹配了:pp-d1*、pp-*,还有最后的*internal.pp.com。而第三个规则里的ProxyCommand就覆盖了前面两个规则里没有代理的设置,所以才会跳到proxy的验证步骤。

解决这个问题最简单的方法是修改第三个带代理的规则,让它排除pp-d1开头的服务器,具体操作如下:

把第三个规则的Host行改成:

Host !pp-d1* *internal.pp.com

这里的!pp-d1*表示“排除所有pp-d1开头的主机”,这样你的目标服务器pp-d1-gritz.pp.internal.com就不会匹配这条带代理的规则了,只会应用前两条规则,自然就不会走代理了。

修改后的完整配置如下:

Host pp-d1*
  User ubuntu
  Port 22
  IdentityFile ~\.ssh\mykey
  SendEnv LS_*
  SendEnv TERM=screen
  ForwardAgent yes

Host pp-*
  User admin
  Port 22
  IdentityFile ~\.ssh\mykey
  SendEnv LS_*
  SendEnv TERM=screen
  ForwardAgent yes

Host !pp-d1* *internal.pp.com
  User ubuntu
  Port 22
  IdentityFile ~\.ssh\mykey
  SendEnv LS_*
  SendEnv TERM=screen
  ForwardAgent yes
  ProxyCommand ssh proxy.internal.pp.com nc %h %p 2> /dev/null

另外还有一个备选方案:如果不想修改第三个规则的范围,可以在pp-d1*的规则末尾加上ProxyCommand none,然后把pp-d1*的规则移到第三个规则的后面。这样后面的ProxyCommand none会覆盖第三个规则里的代理设置,不过这种方法不如第一种清晰,因为规则顺序调整后可能会影响其他pp-*主机的匹配,所以更推荐第一种排除模式的方法。

你可以试试修改后再用ssh pp-d1-gritz.pp.internal.com -vvv调试,应该就不会再触发代理命令了。

备注:内容来源于stack exchange,提问作者Peter

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.22 09:08:11