很早就接触到了SSH,起初并不知道有ssh config
这样一个东西存在,基本上是摸着石头过河,中间遇到过不少问题,走过不少弯路。
最后总结出来了两个解决办法,今天无意间发现原来其中有一个这么好用的工具一直都被我忽略了。
什么是SSH Config
先决条件:在使用ssh 之前,需要先安装好
Openssh
、SSH1
或者是SSH2
。(Linux、Mac用户请忽略)
~/.ssh/config
是通过ssh 连接远程服务器时使用的配置文件。
为什么要使用SSH Config
例如:使用SSH 进行远程连接,一般会这样做:
1 | $ ssh Boo@18.182.201.142 |
在简单地连接情况下,它并不麻烦。但是当端口号不是默认值(22)时,当密钥对不是默认名称时,连接就变得复杂了。
1 | # 指定端口连接 |
此时,使用ssh config
就变得很有用了。
1 | # vim ~/.ssh/config |
现在在连接使用如下命令:
1 | $ ssh aliyun |
是不是非常的方便!就算此时手上有多台服务器需要管理,只要配置好对应的~/.ssh/config
参数,就可以很轻松的进行连接了。
但需要注意的是:有关ssh 的配置不能分成多个文件,只能写在这一个文件中~/.ssh/config
(如果你有更好的办法)。
SSH 的配置文件同样适用于其他程序,如:scp
,sftp
等。
常用的配置选项
配置文件格式
- 空行和以’#’开头的行是注释。
- 每行以关键字开头,后跟参数。
- 配置选项可以用空格或可选的空格分隔,只需要一个=。
- 参数可以用双引号(”)括起来,以指定包含空格的参数。
常用关键字
SSH Config 的关键字不区分大小写,但是参数区分大小写。
- Host:可以理解为远程主机名的别名,最终指明这个名称进行连接,如:
ssh aliyun
- HostName:需要远程连接的主机名,通常都是IP。
- Port:指定连接端口
- User:指定连接用户
- IdentityFile:指明远程连接密钥文件
注:Host 关键字可以包含以下模式匹配:
*
- 匹配零个或多个字符。例如,Host 将匹配所有主机,同时`192.168.0.匹配
192.168.0.0/24`子网中的所有主机。- ? - 恰好匹配一个字符。该模式Host
10.10.0.?
将匹配10.10.0.[0-9]
范围内的所有主机。 - !- 在模式的开头将否定其匹配例如,Host
10.10.0.*
!10.10.0.5
将匹配10.10.0.0/24
子网中的任何主机,除了10.10.0.5
。
配置文件加载顺序
全局配置文件:
/etc/ssh/ssh_config
用户配置文件:
~/.ssh/config
ssh 客户端按以下优先顺序读取其配置:
- 从命令行指定的选项
- 用户的ssh 配置文件
- 全局的ssh 配置文件
如果希望SSH 客户端忽略ssh 配置文件中指定的所有选项,可以使用:
1 | $ ssh -F user@example.com |
恢复连接
常用SSH 的小伙伴可能都知道,使用SSH 连接到远程服务器之后,如果一段时间没有输入任何指令,很有可能会断开与服务器的连接,需要重连就会变得很麻烦。
此时,ssh config 又变得很有用了。
1 | #定期向服务器发送实时报告(每60秒,可以自定义) |