如何配置多个ssh key

我们都知道在使用git管理代码时,要推送代码到远程仓库时,为了不想每次都输入账号密码,会配置一下ssh key。但是如果你有多个github账号,或者同时还有gitlab或者是gitee账号,我在推送到这三个账号的仓库都不想输入用户名密码,可不可以把github上使用的ssh key跟其他的账号共享呢?我没有这样试过,不过即便是可以,也不太安全吧。最好的做法就是为这些账号分别创建ssh key,分别配置。

配置单个SSH key,可以参考:配置git环境之设置SSH key
而配置多个SSH key未必都熟悉。其实方法也很简单:

1. 生成ssh key

第一个,给github用

1
ssh-keygen -t rsa -C 'xxx@abc.com' -f ~/.ssh/github_id_rsa

第二个,给gitee用

1
ssh-keygen -t rsa -C 'xxx@edf.com' -f ~/.ssh/gitee_id_rsa

由于指定了文件名,可以一路回车,不用输入密码。
然后~/.ssh目录下会出现4个文件:

1
2
3
4
github_id_rsa
github_id_rsa.pub
gitee_id_rsa
gitee_id_rsa.pub

2. 在~/.ssh 目录下创建config文件。

打开~/.ssh目录

1
open ~/.ssh

编辑config文件,写入:

1
2
3
4
5
6
7
8
9
10
11
# github
Host github.com # host名字可以随意,自己能识别就好,我这里直接使用了网站域名
HostName github.com
PreferredAuthentications publickey
IdentityFile ~/.ssh/github_id_rsa

# gitee
Host my.gitee.com
HostName gitee.com
PreferredAuthentications publickey
IdentityFile ~/.ssh/gitee_id_rsa

3. 将为不同账号生成的公钥,填入各自网站的ssh key配置中。

可以通过cat查看公钥内容

1
cat ~/.ssh/github_id_rsa.pub

4. 检测配置成没成功

检测方法:ssh -T git@Host, Host 就是你之前在config文件中配置的Host 的值。
检测github的

1
ssh -T git@github.com

检测gitee的

1
ssh -T git@my.gitee.com

如果有提示问要不要把这个RSA host key 添加到 konwn_host 列表中,选择yes。
最后如果看到类似如下的提示,说明配置成功:

1
Hi xxxx! You've successfully authenticated,but...... access.

搞定!

科普:SSH:Secure Shell,是建立在应用层基础上的安全协议。github要求推送代码的用户是合法的,所以每次推送都需要输入账号和密码,用于验证你是否为合法用户,为了省去每次都要输入密码的步骤,采用ssh公钥秘钥,也就是ssh key来验证,公钥放到github上,推送代码时,git会检测你本地的私钥是否跟github上的公钥配对。ssh key可以理解为你的身份标识,公钥放在github上表明你是这个项目的一个开发人员,公钥匙可以被截获的,但是私钥在本地别人就无法截获,ssh key可以保证每次传输都是安全的。

Have a nice day!