0%

ssh_config配置文件

一、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文件中(即在“
/.ssh/config”和“/etc/ssh/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
2
3
4
5
6
7
8
9
10
11
12
Host dsl
HostName www.dsl.com.cn
User dslztx
Port 22
IdentityFile ~/.ssh/keys/dsl.key

Host *
HostName www.dsl.com
User dslztx
Port 23
IdentityFile ~/.ssh/keys/dsl.key
ProxyCommand ssh -W %h:%p proxy-agent

现在命令行中输入的“host name”为“dsl”,因此两个配置小节都被命中,最终生效的参数集合和相应的参数值如下:

1
2
3
4
5
HostName www.dsl.com.cn
User dslztx
Port 22
IdentityFile ~/.ssh/keys/dsl.key
ProxyCommand ssh -W %h:%p proxy-agent

参考文献: [1]man 5 ssh_config [2]https://unix.stackexchange.com/questions/152264/stop-ssh-config-on-first-match
您的支持将鼓励我继续分享!