一、SSH Client的参数值来源
SSH Client的参数值来源主要有3个,分别是“命令行配置”,“~/.ssh/config”和“/etc/ssh/ssh_config”。
二、ssh_config文件
ssh_config文件:指代“~/.ssh/config”和“/etc/ssh/ssh_config”这两个配置文件。
三、优先级顺序
不同来源的参数值的优先级按照“etc/ssh/ssh_config”,“/.ssh/config”,“命令行配置”顺序从低到高排序。/.ssh/config”和“/etc/ssh/ssh_config”配置文件中),越早定义的参数值优先级越高。
在ssh_config文件中(即在“
四、ssh_config文件的格式
4.1、注释
#开头的语句是注释语句。
4.2、基本结构
ssh_config文件的基本结构是“keyword arguments(参数名 参数值)”。
4.3、重要内容——“Host”隔开的小节
在ssh_config文件中,可以使用“Host”来隔开不同的配置小节,在这样的配置小节中,可以配置以下这些重要参数:
1、“Host”
配置本小节被命中的条件,比较的对象是“命令行中输入的host name”,支持通配符(“*”表示任意字符串,“?”表示任意单个字符)。
2、“HostName”
表示SSH Server所在机子的域名,支持完整域名,缩写别名,IP地址,也支持“%h”这个转义序列,该转义序列指代“命令行中输入的host name”。
3、“Port”
指定SSH Server所监听的端口。
4、“IdentityFile”
建立SSH连接使用的私钥文件。
5、“User”
建立SSH连接使用的用户名。
6、“ForwardAgent”
是否将“公钥私钥验证匹配计算过程”递交给ssh-agent程序处理。
五、ssh_config文件的反自然命中逻辑
ssh_config文件中存在多个配置小节,自然的命中逻辑应该为:按照配置小节的配置顺序,依次进行命中测试,一旦首次命中即停止,最终生效的参数集合和相应的参数值完全来自于该命中配置小节。而实际中的命中逻辑是反自然的:按照配置小节的配置顺序,依次进行命中测试,首次命中不停止,直到找出所有命中配置小节,最终生效的参数集合是这些命中配置小节中参数集合的并集,相应的参数值是这些命中配置小节中该参数的首次配置值。
举例来说,假如ssh_config文件内容如下:
1 | Host dsl |
现在命令行中输入的“host name”为“dsl”,因此两个配置小节都被命中,最终生效的参数集合和相应的参数值如下:
1 | HostName www.dsl.com.cn |
参考文献: [1]man 5 ssh_config [2]https://unix.stackexchange.com/questions/152264/stop-ssh-config-on-first-match