当 OpenSSH 配置默认使用 SOCKS 连接器时,把具名例外放在那条宽泛规则之前:

Host internal.example
    ProxyCommand none

Host *
    ProxyCommand nc -X 5 -x proxy.example:1080 %h %p

这个例子使用OpenBSD nc 的 SOCKS5 选项接口。用 ssh internal.example 连接会选中该例外;其余主机则获得默认连接器。对于允许的公共 SSH 目的地,SOCKS5 代理列表中无需账号的条目可以提供默认代理地址,前提是它允许每个实际主机和 SSH 端口;保留原本设想的内部例外。

顺序很重要,因为 OpenSSH 对某个参数采用最先取得的值。例外必须在匹配的默认值提供 ProxyCommand 之前出现,包括通过 Include 文件读入的默认值。

用下面的命令检查某次调用的实际设置:

ssh -G internal.example

主机模式匹配的是调用 SSH 时使用的名称。如果某条命令使用别名,而该别名的 HostName 指向 internal.example,也要给这个别名同样的例外。这样规则就绑定在真实的配置查找上,而不是假定 DNS 上等价的名称会选中同一个配置块。

相关文章