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
相关产品推荐
相关产品推荐

