有些事情总是无法避免的,要是你没有遇到过这个问题,你可能不知道我在说什么。就比如说我自己的一些开源项目放在github上,然而公司的项目是部署在gitlab上。我们使用git进行版本管理即与远程服务器做到同步,但是问题来了:默认情况下每个账户生成的秘钥位置和名称都是相同的,这样后生成的秘钥就会覆盖前面的秘钥导致其失效。解决的办法就是在生成后一个秘钥的时候对其重新命名,以避免冲突,同时将不同的秘钥配置到相对应的Host上面,这样在访问不同的远程仓库时调用不同的key,冲突也就解决了。
Mac环境为例
生成gitlab密钥
1 | ssh-keygen -t rsa -C "注册gitlab的邮箱" -b 4096 |
使用默认名称,然后不设置密码,回车直接跳过。
查看 .ssh
目录,可以看到生成的公钥和私钥,名称分别为 id_rsa.pub
和 id_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.pub
和 id_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
对应的名称是一个别名,命名可以随意,用来进行远程连接。HostName
和IdentityFile
是各自主机名称以及对应的秘钥文件。
配置完毕。