背景

-

公司之前的版本控制工具一直用的svn,最近开发的新项目,代码准备改换到了gitlab上进行管理。而我自己平时写的一些代码是放在github上进行托管的,这二者都是基于git的开源分布式版本控制系统,在本地可以通过ssh进行远程登录验证和数据传输(关于ssh的详细介绍可以参考这篇博文:)。/Users/mac用户名/.ssh/(mac平台,本文针对os x系统介绍)。

But,问题来了:默认情况下每个账户生成的秘钥位置和名称都是相同的,这样后生成的秘钥就会覆盖前面的秘钥导致其失效。解决的办法就是在生成后一个秘钥的时候对其重新命名,以避免冲突,同时将不同的秘钥配置到相对应的Host上面,这样在访问不同的远程仓库时调用不同的key,冲突也就解决了。具体操作如下:

生成gitlab秘钥
-
默认你已经注册了gitlab/github账户,以我自己为例,公司项目用的gitlab,自己代码托管在github。先进行公司账号的设置:

ssh-keygen -t rsa -C "注册的gitlab邮箱",生成的公司秘钥会提示是否需要重命名,公司gitlab的秘钥我们就使用默认名称,直接回车跳过,另外还会提示你设置密码,设置密码的话后续登陆会比较麻烦,也直接跳过。成功后大概是这样的:

Linux gitlab账号查看_重命名

id_rsa.pub、id_rsa

Linux gitlab账号查看_Linux gitlab账号查看_02

cat ~/.ssh/id_rsa.pub,或者直接用nano编辑期打开id_rsa.pub。公钥大概是这个样子:

Linux gitlab账号查看_git_03

gitlab账户的的SSH Keys中即可。

Linux gitlab账号查看_github_04

生成github秘钥

-

终端执行命令:ssh-keygen -t rsa -C "注册的github邮箱",这次一定要注意,对生成定的秘钥进行重命名,这里暂且重命名为id_rsa_home,同样不设置密码。可以看到生成的公私秘钥已经分别被重命名为id_rsa_home.pubid_rsa_home

Linux gitlab账号查看_重命名_05

cat ~/.ssh/id_rsa_home.pub

Linux gitlab账号查看_git_06

不要忘记将其拷到github的SSH Keys里~

gitlab和github的秘钥是分开生成了,可怎么让这两份秘钥分别对应到相应的远程仓库呢?就是让id_rsa.pub认得gitlab,让id_rsa_home.pub认得github。既然不能自动识别,那就只好手动设置了: 配置config

-

在.ssh/目录下新建config文件:touch config,通过nano编辑器进行如下配置:

Linux gitlab账号查看_git_07

Host对应的名称是一个别名,命名可以随意,用来进行远程连接,当然使用真实的主机名称也是可以的。HostNameIdentityFile就是各自主机名称以及对应的秘钥文件了~

这样配置之后,两份秘钥也就对应到各自相应的仓库上了。通过设置别名,也就可以设置任意多的账户了~

最后利用别名检测下配置是否成功~

检测

-

检测github连接,如果提示是否建立连接,直接yes就行:

Linux gitlab账号查看_重命名_08

gitlab连接:

Linux gitlab账号查看_重命名_09

不报错的话,就说明设置成功了!