SSH是远程登录Linux主机的最流行工具之一,SSH客户端提供的功能十分强大,具有很多连接配置选项。
如果每次登录都要重复设定一些复杂的连接参数,这很容易导致出错并且降低效率,幸运地是,我们可以通过设定ssh客户端的连接配置文件来简化登录过程中繁琐的参数设定。 本篇教程就是简要讲述ssh客户端解析配置文件的过程以及一些范例。
配置文件
ssh客户端的配置文件位于~/.ssh
目录下,配置文件名统一为config
;
检查该配置文件是否存在,如果不存在,则创建该文件:
touch ~/.ssh/config
配置文件范例
配置文件的内容格式范例如下:
Host root-upgrade
User root
Host test-upgrade
User test
Host *-upgrade
Port 8822
HostName 192.168.22.103
IdentifyFile ~/id_rsa_upgrade
Host *
Port 7722
IdentifyFile ~/id_rsa_common
从配置文件中可以看出,配置文件的参数是按照Host
块来组织的;
每一个Host
块的首部都有一条匹配规则(也就是Host名字),该匹配规则支持通配符;
如果匹配成功了,ssh连接时就会使用已经匹配成功的Host
块配置选项。
进行ssh登录时只要指定Host名字(ssh host-name
),
ssh客户端就会使用host-name
去~/.ssh/config
配置文件中寻找配置信息。
Host
关键字和配置参数项的名字大小写是不敏感的。
配置文件的解析过程
SSH客户端对config
配置文件的解析过程是按照Host块
自上而下进行的,
如果遇到重复设置的配置参数,而该参数并不能设定多个值,则只选取第一个来使用。
参考配置文件范例
中的例子,如果在命令行中执行如下命令:
ssh test-upgrade
那么客户端会找到~/.ssh/config
配置文件进行自上而下的解析:
对
Host root-upgrade
进行匹配,匹配失败;对
Host test-upgrade
进行匹配,匹配成功,那么使用该Host
块的参数作为连接参数, 也就是登录的用户为test
;对
Host *-upgrade
进行匹配,匹配成功,那么登录的端口为8822
,登录主机为192.168.22.103
, 认证的私钥文件加上~/id_rsa_upgrade
(私钥文件在连接时可以设定多个,~/.ssh/id_rsa
下的私钥文件是在开始解析时就默认加入到认证的私钥文件中);对
Host *
进行匹配,匹配成功;虽然该Host
块设定使用7722
设定连接端口,但是之前Port
参数就已经设定该值为8822
, 所以忽略该参数,并将~/id_rsa_common
加入到进行认证的私钥文件中;~/.ssh/config
解析完毕。
解析完毕之后,ssh test-upgrade
命令等同于以下命令:
ssh test@192.168.22.103 -p 8822 -i ~/.ssh/id_rsa -i ~/id_rsa_upgrade -i ~/id_rsa_common