主要流程参考:http://www.chenyp.com/2017/08/11/multiple-git-account/
有一些需要特别注意:
背景:
1.需要在一台电脑登录GitHub账户和公司gitlab账户
2.gitlab 使用access token + ssh 登录
注意步骤:
1.配置多个git账户都需要先生成公钥和私钥
ssh-keygen -t rsa -C "xxx.com" -b 4096
回车后可以自己定义保存的位置和名称 或者使用默认(默认仅限第一次生成使用,否则会覆盖)
xxx\.ssh\Gitlab_rsa
2.在目录下(默认~/.ssh)会生成
~/.ssh
Gitlab_rsa
Gitlab_rsa.pub
3.将Gitlab_rsa.pub中内容拷贝到gitlab--seetings--ssh-keys中,保存
如果只是这样,从Gitlab上clone代码时,相较于第一次的区别,会提示你输入密码,但其实你根本不知道密码是什么。
为什么会这样,因为私钥文件不对。在没有任何额外配置的情况下,Git客户端会使用默认的私钥文件id_rsa,而不是为Gitlab生成的Gitlab_rsa。因此我们需要添加一些配置来保证Git客户端在和不同的Git Server通信时使用对应的私钥文件。
临时解决方案
将新的私钥加入到 ssh-agent 中即可。ssh-agent是一种控制用来保存公钥身份验证所使用的私钥的程序,其实ssh-agent就是一个密钥管理器,运行ssh-agent以后,使用ssh-add将私钥交给ssh-agent保管,其他程序需要身份验证的时候可以将验证申请交给ssh-agent来完成整个认证过程,执行如下命令添加新的私钥到ssh-agent中:
eval $(ssh-agent -s)
ssh-add ~/.ssh/Gitlab_rsa
之后就可以正常使用了,不过这种方案是临时的,一旦你关闭掉当前的terminal,下次又要重复输入上面的命令,下面的方案可以避免这种重复输入的麻烦。
永久解决方案
在用户主目录(~/.ssh)创建名称为config的文件,此文件用于配置Git服务器对应的私钥
主要增加修改内容为Host和IdentityFile根据实际情况修改即可,Host 也可以输入IP,不要加上端口(即使部署的不是80或者443端口也不用加)。同理,如果还有第三个或更多,继续生成不同的文件并加入到config文件中即可,之后就可以使用了。
# Read more about SSH config files: https://linux.die.net/man/5/ssh_config
Host xxx-173-Linux
HostName 172.xx.xxx.xxx
User xxx
Port 22
IdentityFile /Users/xxx/.ssh/id_rsa
Host git.公司gitlab名.com
#HostName git.公司gitlab名.com
PreferredAuthentications publickey
#User xxx
IdentityFile /Users/xxx/.ssh/Gitlab_rsa
4.测试
通过如下的命令可以进行测试,格式:ssh -T git@Host,如:
ssh -T git@git.公司gitlab名.com
成功会出现
5.特别注意事项,如果此前设置的全局用户信息不是新增的用户,需要修改
git config user.name "ryan"
git config user.email "ryan@example.cn"
6.之后就按照正常git 提交修改代码操作即可