本来一直使用github管理项目,后来公司搭建了gitlab环境,要求使用gitlab管理项目。在使用时,就与github有冲突。百度了一下,有2个解决方案:
1.使用同一个邮箱,生成的 public key 也会是同一个(感觉有点不现实,至少我的邮箱是不同的,也懒的改)
2.基于config文件(原理上就是对 SSH 协议配置 config 文件,对不同的域名采用不同的认证密钥。)
配置流程:
a. 生成私钥
ssh-keygen -t rsa -C "xx@163.com" //可以直接回车,默认情况是在ssh目录下,生成id_rsa、id_rsa.pub
ssh-keygen -t rsa -C "xxxxx@qq.com"
Generating public/private rsa key pair.
Enter file in which to save the key (/Users/xx/.ssh/id_rsa): /Users/xx/.ssh/id_rsa_github
这个时候手动输入路径和文件名/Users/xx/.ssh/id_rsa_github,之后2次输入电脑密码。会在ssh目录下生成id_rsa_github、id_rsa_github.pub两个文件/。
查看一下:
cd ~/.ssh
ls
这个时候会发现有id_rsa、id_rsa.pub、id_rsa_github、id_rsa_github.pub四个文件。
将id_rsa.pub和id_rsa_github.pub分别打开,设置到github和gitlab的sshkey一项。
cat id_rsa.pub //可以直接打开,或者用sublime打开都行
b.编写config文件,告诉本地git到不同的国家带不同的钥匙
cd ~/.ssh
vim config
配置config(具体内容根据自己需求来定)
#gitlab
Host gitlab
User xx
HostName gitlab.*.com
IdentityFile ~/.ssh/id_rsa
#github
Host github
User xxxxx
HostName github.com
IdentityFile ~/.ssh/id_rsa_github
c.配置仓库
#gitlab
cd ~/workspace/gitlab
git init
git config --global user.name 'xx'
git config --global user.email 'xx@163.com
#github
cd ~/workspace/githubgit init
git config --local user.name 'xxxx'
git config --local user.email 'xxxx@qq.com'
注意在使用git config --local user.name 'xxxx'配置时,一定要到仓库目录下,配置完成后,可以查看一下,用户名和邮箱是否添加上去。
cat ~/.gitconfig | head -3
也可以使用git config --list查看所有的用户名和邮箱
d.最后一步
之前几步我都是在网上查看的,但是发觉按照要求做后,当使用gitlab时没有问题,但是使用GitHub克隆项目的时候还是会报错:git@github.com: Permission denied (publickey), Host key verification failed。(gitlab 邮箱是设置的global的,github邮箱是设置local的)
在折腾了很久后,误打误撞添加了一下id_rsa_github之后就可以了。
ssh-add ~/.ssh/id_rsa_github
再次clone代码时,会有个警告。
The authenticity of host 'x x x x' can't be established.
ECDSA key fingerprint is SHA256:JUKzm0IYhwDal2m/OftPz3tRoAfaXCTzYKZas5wTx1I.
Are you sure you want to continue connecting (yes/no)? yes
输入yes就好了。
网友评论