问题的原因:
生成秘钥的时候默认情况下每个账户生成的秘钥位置和名称都是相同的,这样后生成的秘钥就会覆盖前面的秘钥导致其失效,而 GitLab 和 GitHub 上虽有生成秘钥的指引文章,但没有特殊说明这块。
解决方法:
在生成后一个秘钥的时候对其重新命名,以避免冲突,同时将不同的秘钥配置到相对应的Host上面,这样在访问不同的远程仓库时调用不同的key,冲突也就解决了。
具体操作:
生成 GitLab 秘钥
本地生成ssh keys命令:ssh-keygen -t rsa -C "注册的gitlab邮箱",生成的公司秘钥会提示是否需要重命名,公司 GitLab 的秘钥我们就使用默认名称,直接回车跳过,另外还会提示你设置密码,设置密码的话后续登陆会比较麻烦,也直接跳过。
查看 .ssh/目录(/Users/mac用户名/.ssh/),可以看到公私秘钥已经生成,名称分别为id_rsa.pub、id_rsa
执行命令查看公钥内容:cat ~/.ssh/id_rsa.pub,或者直接用 Sublime Text2 编辑器打开id_rsa.pub。
将这部分代码添加到到 GitLab 账户的的 SSH Keys 中即可。
生成 GitHub 秘钥
终端执行命令:ssh-keygen -t rsa -C "注册的github邮箱",这次一定要注意,对生成定的秘钥进行重命名,这里暂且重命名为 id_rsa_github ,同样不设置密码。可以看到生成的公私秘钥已经分别被重命名为 id_rsa_github.pub 和 id_rsa_github。
可以查看公钥里面的内容:cat ~/.ssh/id_rsa_github.pub
添加到到 GitHub 账户的的 SSH Keys 中即可
GitLab 和 GitHub 的秘钥是分开生成了,可怎么让这两份秘钥分别对应到相应的远程仓库呢?就是让id_rsa.pub认得gitlab,让 id_rsa_github.pub 认得github。既然不能自动识别,那就只好手动设置了:
配置config
在.ssh/目录下新建config文件:touch config,通过 Sublime Text2 编辑器进行如下配置:
# GitLab
Host gitlab (随意取名)
HostName git.xxx.cn (公司的 GitLab host)
IdentityFile ~/.ssh/id_rsa
# GitHub
Host github
HostName github.com
IdentityFile ~/.ssh/id_rsa_github
检测
ssh -T git@github
ssh -T git@gitlab
如果没有报错,就说明设置成功了~