如何在同一客户端部署多个git帐号(多账户下设置ssh keys)?

有些事情总是无法避免的,要是你没有遇到过这个问题,你可能不知道我在说什么。就比如说我自己的一些开源项目放在github上,然而公司的项目是部署在gitlab上。我们使用git进行版本管理即与远程服务器做到同步,但是问题来了:默认情况下每个账户生成的秘钥位置和名称都是相同的,这样后生成的秘钥就会覆盖前面的秘钥导致其失效。解决的办法就是在生成后一个秘钥的时候对其重新命名,以避免冲突,同时将不同的秘钥配置到相对应的Host上面,这样在访问不同的远程仓库时调用不同的key,冲突也就解决了。

Mac环境为例

生成gitlab密钥

1
ssh-keygen -t rsa -C "注册gitlab的邮箱" -b 4096

使用默认名称,然后不设置密码,回车直接跳过。
查看 .ssh 目录,可以看到生成的公钥和私钥,名称分别为 id_rsa.pubid_rsa

使用命令 cat ~/.ssh/id_rsa.pub 可以查看公钥内容,这个就是gitlab下ssh keys下需要添加的内容。

生成github密钥

1
ssh-keygen -t rsa -C "注册github的邮箱" -b 4096

这次不使用默认名称,要对生成定的秘钥进行重命名,这里重命名为 id_rsa_github , 同样不设置密码。
查看 .ssh 目录,可以看到生成的公钥和私钥,名称分别为 id_rsa_github.pubid_rsa_github

使用命令cat ~/.ssh/id_rsa_github.pub可以查看公钥内容,这个就是github下ssh keys下需要添加的内容。

配置config文件

.ssh/ 目录下新建config文件:touch config,通过vim进行如下配置:

1
2
3
4
5
6
7
8
9
# gitlab
Host gitlab
HostName gitlab.foo.com
IdentityFile ~/.ssh/id_rsa

# github
Host github
HostName github.com
IdentityFile ~/.ssh/id_rsa_github

然后:wq (vim命令,保存退出)

Host对应的名称是一个别名,命名可以随意,用来进行远程连接。HostNameIdentityFile是各自主机名称以及对应的秘钥文件。


配置完毕。