Github下使用多个SSH Key

我们首先来了解一下,什么是SSH KEY?

SSH 密钥对总是成双出现的,一把公钥,一把私钥。公钥可以自由的放在您所需要连接的 SSH 服务器上,而私钥必须稳妥的保管好。

所谓”公钥登录”,原理很简单,就是用户将自己的公钥储存在远程主机上。登录的时候,远程主机会向用户发送一段随机字符串,用户用自己的私钥加密后,再发回来。远程主机用事先储存的公钥进行解密,如果成功,就证明用户是可信的,直接允许登录shell,不再要求密码。这样子,我们即可保证了整个登录过程的安全,也不会受到中间人攻击。

当我们在本地需要用不同的账户对Github上不同的项目进行提交,那么就涉及到在本地使用多个SSH KEY了,生成一个SSH Key的方法如下:

ssh-keygen -t rsa -C "mailname1@xxx.com"  

上面这个email地址就是你在github上注册该账号时使用的email,系统会提示你,是否将key保存在 ~/.ssh/id_rsa 这个文件中,如果这是你第一次生成SSH KEY,并且也你也只有一个账号,那么就可以存储到这个默认的位置,如果有多个账号的话,建议保存为~/.ssh/id_rsa_emailname1,方便以后识别。

如果有多个Github的账号,那么继续生成一个SSK Key,并保存在~/.ssh/id_rsa_emailname2这个文件下。

ssh-keygen -t rsa -C "mailname2@xxx.com"  

当生成了N个账号的SSH KEY并保存到相应的文件中时,在~/.ssh文件夹下建立一个config文件,该文件用来指明,当使用某个账号时对应使用哪个SSH KEY

1
2
3
4
5
6
7
8
9
Host github.com_mailname1
Hostname github.com
User git
IdentityFile ~/.ssh/id_rsa_mailname1

Host github.com_mailname2
Hostname github.com
User git
IdentityFile ~/.ssh/id_rsa_mailname2

为了在版本库提交时,能够通过相应的Host找到与之对应的SSH KEY,我们还需要对版本库中的配置文件.git/config进行修改。比如,某个版本库使用的账号是mailname1这个邮箱地址注册的,那么我们就要将其配置文件中原来的

url = git@github.com:xxxxxxxxx

修改为

url = git@github.com_mailname1:xxxxxxx

这样,当我们提交这个版本库时,版本库会根据github.com_mailname1对应到~/.ssh/config文件中的相应HOST,并使用相应的SSH KEY。