Git 生成多个 SSH Key
当有多个git账号的时候,比如一个github,用于自己进行一些开发活动,再来一个gitlab,一般是公司内部的git。这两者你的邮箱如果不同的话,就会涉及到一个问题,生成第二个git的key的时候会覆盖第一个的key,导致必然有一个用不了。
如何解决
在~/.ssh目录下,为每个git账号生成key,并新建一个config文件配置一下,就可以解决问题
具体操作
1.生成第一个ssh key(个人github账号)
1
ssh-keygen -t rsa -C "email"
这里的email是注册github的邮箱地址
这里不要一路enter,让你选择在哪里选择存放key的时候写个名字,比如 id_rsa_github,之后的两个可以回车。 完成之后我们可以看到~/.ssh目录下多了两个文件。如下:
1
2
id_rsa_github
id_rsa_github.pub
2.生成第二个ssh key(公司gitlab账号)
1
ssh-keygen -t rsa -C "email"
这里的email是公司gitlab注册的邮箱地址
还是一样不要一路回车,在第一个对话的时候继续写个名字,比如 id_rsa_gitlab, 之后的两个可以回车。如下:
1
2
id_rsa_gitlab
id_rsa_gitlab.pub
然后拷贝.pub
文件里面的内容。
打开你的github,点击Setting,打开SSH and GPG Keys,点击右边New SSH key.
3.创建并修改config文件
到.ssh目录之行如下操作
1
2
touch config
chmod 600 config
添加如下内容:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
# first github user
Host github.com
Hostname github.com
Identityfile ~/.ssh/id_rsa_github
User xxx
# second github user(给一个新的Host称呼)
Host second.github.com // 主机名字,不能重名
HostName github.com // 主机所在域名或IP
Identityfile ~/.ssh/id_rsa_gitlab2 // 私钥路径
User xxx // 用户名称
# gitlab user
Host git.elenet.me
HostName git.elenet.me
PreferredAuthentications publickey
IdentityFile ~/.ssh/id_rsa_eleme
User xxx
4.github和gitlab上添加公钥即可,这里不再多说。
5.测试
1
ssh -T git@github.com
出现:
1
Hi yourname! You've successfully authenticated, but GitHub does not provide shell access.
表示github配置成功!如此这般改成公司gitlab地址再执行一遍。
注意:这里测试的是你在config文件中填写的Host字段,而不是HostName
6.现在开始使用新的公私钥进行工作吧
情景1:使用新的公私钥进行克隆操作
git clone git@second.github.com:username/repo.git
注意此时要把原来的github.com
配置成你定义的second.github.com
情景2:已经克隆,之后才添加新的公私钥,我要为仓库设置使用新的公私钥进行
push
操作修改仓库的配置文件:
.git/config
为[remote "origin"] url = git@second.github.com:username/repo.git
即可,之后就照平常一样工作就行啦!
补充一下
如果之前有设置全局用户名和邮箱的话,需要unset一下
1
2
git config --global --unset user.name
git config --global --unset user.email
然后在不同的仓库下设置局部的用户名和邮箱 比如在公司的repository下,执行:
1
2
git config user.name "yourname"
git config user.email "youremail"
在自己的github的仓库在执行刚刚的命令一遍即可。 这样就可以在不同的仓库,已不同的账号登录。