MoR03r MoR03r's Blog
SSH用户配置文件Config的小Tips
发表于 2019-9-2 | 综合

常用的ssh连接命令一般形如:

$ ssh user@hostname -p port

使用公私钥登陆:

$ ssh user@hostname -p port -i id_rsa

如果需要管理的服务器过多,每次这样进行连接比较麻烦,而且浪费时间和精力。接下来进入正题,使用ssh的用户配置文件Config文件来管理不同的ssh会话。

使用SSH配置文件

SSH程序可以从两个路径获取配置参数:

用户配置文件(~/.ssh/config)

系统配置文件(/etc/ssh/ssh_config)

同一个配置文件中可以配置多个主机连接设置,每个连接配置使用Host来进行区分(每个不同配置的别名)。当我们需要连接服务器时,可以通过ssh Host来加载配置进行连接。

配置项

Host 别名

HostName 主机名

Port 端口

User 用户名

IdentityFile 密钥文件的保存路径

IdentitiesOnly 只接受SSH公私钥登陆

PreferredAuthentications 强制使用PublicKey验证

Host

Host配置标识了一个配置区段

SSH配置项参数值可以使用通配符:

'*' 代表0-n个非空白字符
'?' 代表一个非空白字符
'!' 表示例外统配

我们可以在系统配置文件中看到一个匹配所有host的默认配置区段:

$ cat /etc/ssh/ssh_config | grep '^Host'
Host *

这里有一些默认配置项,我们可以在用户配置文件中覆盖这些默认配置。

GlobalKnownHostsFile

指定一个或多个全局认证主机缓存文件,用来缓存通过认证的远程主机的密钥,多个文件用空格分隔。默认缓存文件为:/etc/ssh/ssh_known_hosts/etc/ssh/ssh_known_hosts2

HostName

指定远程主机名,可以直接使用数字IP地址。如果主机名中包含%h,则实际使用时会被命令行中的主机名替换。

IdentityFile

指定密钥认证使用的私钥文件路径。默认为~/.ssh/id_dsa~/.ssh/id_ecdsa~/.ssh/id_ed25519~/.ssh/id_rsa中的一个。文件名称可以使用以下转义符:

'%d' 本地用户目录
'%u' 本地用户名称
'%l' 本地主机名
'%h' 远程主机名
'%r' 远程用户名

可以指定多个密钥文件,在连接的过程中会依次尝试这些密钥文件。

Port

指定远程主机端口号,默认为22。

User

指定登陆用户名。

UserKnownHostsFile

指定一个或多个用户认证主机缓存文件,用来缓存通过认证的远程主机的密钥,多个文件用空格分隔。默认缓存文件为:~/.ssh/known_hosts~/.ssh/known_hosts2

StrictHostKeyChecking

SSH客户端的StrictHostKeyChecking配置指令,StrictHostKeyChecking=no时可以实现当第一次连接服务器时自动接受新的公钥,不再有任何警告出现。

可以通过man ssh_config查看用户手册来获得更多参数的介绍。

使用示例

  • 使用指定别名登陆到www.kkzevip.com这台主机
Host kkzevip
    HostName www.kkzevip.com
    Port 22
    User test
    IdentityFile ~/.ssh/id_rsa    # 若没有这一行,则默认使用~/.ssh/id_rsa文件
    IdentitiesOnly yes
$ ssh kkzevip
  • 不同主机使用同一私钥进行登陆
Host github.com gitee.com
    HostName %h
    Port 22
    User git
    IdentityFile ~/.ssh/id_rsa_blog
    IdentitiesOnly yes
$ ssh -T [email protected]
$ ssh -T [email protected]
  • 使用别名通过代理登录到www.kkzevip.com这台主机
Host kkzevip
    HostName www.kkzevip.com
    Port 22
    User test
    ProxyCommand nc -X 5 -x 127.0.0.1:1080 %h %p
    IdentitiesOnly yes
TOP