根据ssh_config(5)
语句Include
可以放置在Match
orHost
块内部来创建条件包含
包括:包括指定的配置文件。可以指定多个路径名,每个路径名可以包含
glob(7)
通配符,并且对于用户配置,可以~
包含对用户主目录的类似 shell 的引用。通配符将按词汇顺序扩展和处理。~/.ssh
如果包含在用户配置文件中或/etc/ssh
包含在系统配置文件中,则假定没有绝对路径的文件位于 in 中。Include 指令可能会出现在 Match 或 Host 块内以执行有条件纳入。
我试图完成这项工作,但似乎总是读取每个包含的文件,而忽略找到的匹配项。到底是怎么回事?
$ ssh -V
OpenSSH_8.0p1, OpenSSL 1.1.1k FIPS 25 Mar 2021
$ cat config_1
Match user foo
Include config_2
Match user bar
Include config_2
Match user !foo,!bar
Hostname xyz
$ cat config_2
Hostname uvw
$ ssh -vv -G -F config_1 bar@random | grep '^hostname'
OpenSSH_8.0p1, OpenSSL 1.1.1k FIPS 25 Mar 2021
debug1: Reading configuration data config_1
debug2: checking match for 'user foo' host random originally random
debug2: match not found
debug1: Reading configuration data ~/.ssh/config_2 << unmatched include
debug2: checking match for 'user bar' host random originally random
debug2: match found
debug1: Reading configuration data ~/.ssh/config_2 << matched include
debug2: checking match for 'user !foo,!bar' host uvw originally random
debug2: match not found
hostname uvw