在我的主机上有两个账户,一个是用于ssh的账户而另一个是用于git的账户。出于安全考虑在主账户中设置了秘钥指纹密码,而不想每次deploy的时候都重复输入密码。所以需要管理多个ssh秘钥。

ssh config文件

在.ssh文件夹下默认是没有config文件的,这里可以手动创建一个config文件,并输入以下内容

1
2
3
4
5
6
Host jhsyi77.com
HostName jhsyi77.com
User jhsy
IdentityFile ~/.ssh/jhsy
User git
IdentityFile ~/.ssh/git

这样做的目的是在同一个主机上分别使用不同的账户登录时使用不同的秘钥进行验证,省去了选择秘钥的麻烦。

缺点是进行ssh登录时需要输入完整的hostname。

但是还不仅仅满足于此

了解到config文件之后还想更多的了解config文件的作用。

config文件的结构

1
2
3
4
5
6
7
8
9
10
11
12
13
Host firsthost
SSH_OPTIONS_1 custom_value
SSH_OPTIONS_2 custom_value
SSH_OPTIONS_3 custom_value

Host secondhost
ANOTHER_OPTION custom_value

Host *host
ANOTHER_OPTION custom_value

Host *
CHANGE_DEFAULT custom_value

可以相对应设置每一个Host的登录选项

可以使用man ssh_config查看相关选项

例如我有两个服务器分别对应家里和公司的,可以这样设置

1
2
3
4
5
6
7
8
Host home
HostName example.com
User apollo
Port 4567

Host work
HostName company.com
User apollo

还可以使用通配符

1
2
3
4
5
6
7
8
9
Host home
HostName example.com
Port 4567

Host work
HostName company.com

Host *
User apollo

直接可以使用ssh home或者ssh work 登录到相对应的主机

host可以自行设置

原文链接:https://www.digitalocean.com/community/tutorials/how-to-configure-custom-connection-options-for-your-ssh-client#common-ssh-configuration-options

探索

以上基本可以解决大多数关于ssh多账户秘钥的问题。但是还有一些问题没有实现。

本着精益求精的精神,暂时还没有找到一种很简洁的修改config的方法。

比如说git使用ssh登录时不能使用host需要用hostname登录,但是在config文件中设置的是host相关选项,还需要添加一个host直接指向hostname才可以让git分配秘钥。暂时还没有理解透彻这个操作,希望有高人指出