git多账号配置 SSH

问题描述

公司要求项目的git账号必须使用公司邮箱,而我平时写的一些小demo肯定是用的自己的邮箱绑定的账号,这样就出现了多账号的问题。

后来不知怎么了,平时使用SourceTree的时候,时不时的就让我输入个密码。。。而且我有个自己的demo在拉取时SourceTree却总是弹出我的公司账号让我输入密码。。。

因此我决定使用ssh方式,从此告别密码输入!


以oschina的代码托管平台为例,我的两个账号,工作账号:Tony(关联公司邮箱),个人账号:YLP(关联qq邮箱)


查看公钥

  • 打开.ssh文件夹
$ cd ~/.ssh/
  • 查看.ssh文件夹下的文件,会发现里边应该有两个id_rsa开头的文件,private key和public key(私钥和公钥)
$ ls
  • 如果之前没用过并且嫌乱的话可以先删掉
$ rm id_rsa*


创建新的公钥

1)创建公司账号的新key
$ ssh-keygen -t rsa -C"[email protected]"
  • 这时会让你输入将要新生成的key的名称,我输入了id_rsa_work,然后回车


    image.png
  • 后边是两次提示输入密码,都直接回车就行

  • 这时就会出现创建成功的提示了

git多账号配置 SSH_第1张图片
image.png
  • 再次ls查看一下文件会发现多了两个文件:id_rsa_work和id_rsa_work.pub
    .pub文件就是公钥,一会将要用到

  • 执行ssh-agent让ssh识别新的私钥

$ ssh-add id_rsa_work
2)创建个人账号的新key

重复上面1)中的所有步骤,不过把key的名字换一下即可,我输入的是id_rsa_me

执行完后,现在公钥就创建好了,可以进行下一步操作了~

关联公钥

我们需要把创建好的公钥跟oschina平台中的项目进行关联

  • 打开id_rsa_work.pub文件,并cmd+v里边的所有内容
$ vim id_rsa_work.pub
  • 打开 http://git.oschina.net/keys 这个页面(登录Tony账号),新建key,把复制的内容粘贴进来

现在我们添加的是用户 ssh key,而不是项目ssh key,两者的区别就是项目下的公钥仅能拉取项目,而用户的key具有推送和拉取的权限。

克隆项目

现在就可以通过ssh链接来克隆公司项目的代码了

git多账号配置 SSH_第2张图片
image.png
git多账号配置 SSH_第3张图片
image.png

多账号配置

按照刚才对Tony(公司账号)关联公钥的操作,登录oschina的YLP(个人账号)重复操作,去克隆YLP账号下的一个项目时,会发现SourceTree提示这是一个无效的源路径/URL

这是因为克隆YLP下的项目时,git是拿默认的id_rsa_work.pub文件里面的key去对比的,这肯定是有问题的嘛,因为YLP账号并没有添加这个key。因此我们需要配置一下来告诉git什么时候用哪个key

config文件配置

在.ssh文件夹下有个config文件,用vim打开它

$ vim config

对其配置如下:

#oschina公司工作账号
Host gitee.com
HostName git.oschina.net
User coder_Ylp
IdentityFile ~/.ssh/id_rsa_work

#oschina个人开发账号
Host giteeYLP.com
HostName git.oschina.net
User splsylp
IdentityFile ~/.ssh/id_rsa_me

解释一下配置信息:

  • Host 是你远程仓库的地址
  • HostName 是远程仓库的名称
  • Port 端口号,如果有做转发需要在这里填写端口号,没有就不必要填
  • User 用户名称
  • IdentityFile 识别key的文件
其实Host 可随便定义,类似一个标识

比如我oschina上的项目,它的ssh地址[email protected]: workTest.git,所以公司账号下的Host我写的是gitee.com

那么我oschina的个人账号就不能再写gitee.com,否则git校验key的时候还是区分不开的,因此我把它改为了giteeYLP.com

注意
1)项目地址更改

因为host改了,相应的我们在克隆项目的时候,ssh的地址也是需要改的,比如我YLP账号下的一个项目ssh地址是[email protected]:meTest.git,那么克隆的时候我需要把它改为:[email protected]:meTest.git,这样就不再提示这是一个无效的源路径/URL了,成功克隆

2)校验

我不明白为什么oschina官方文档写的是输入ssh -T [email protected]进行校验,因为我所有的项目都是[email protected]开头的,因此才有了上述的配置

因此我Tony账号是这么校验的:

$ ssh -T [email protected]

YLP账号是写的giteeYLP.com

$ ssh -T [email protected]

终端都分别提示了:
Welcome to Git@OSC, xxx
说明校验通过,但是如果提示Permission denied (publickey).则说明校验失败

多个平台

前边说的是同一个平台下的多个账号,那么对于多个平台也是一个道理

比如我想在github上进行配置,那么我可以再创建一个新的邮箱生成key,一般也不会用那么多的邮箱和账号。。。所以我还是用我刚才的id_rsa_me.pub

  • 把id_rsa_me.pub公钥的key添加到github上https://github.com/settings/keys

  • 在config文件中增加内容

#github个人开发账号
Host github.com
HostName github.com
User Tony
IdentityFile ~/.ssh/id_rsa_me
  • 验证SSH key
$ ssh -T [email protected]

终端输出如下说明成功了:

Hi splsylp! You've successfully authenticated, but GitHub does not provide shell access.

刷新https://github.com/settings/keys这个页面,会发现秘钥的小钥匙图标由灰色变成绿色了,说明生效了~

这时候就可以直接把github上的项目也通过ssh进行pull、push了。。。



以上就是我实践总结的配置方法,亲测没有问题,如有问题或者更好的方法欢迎指正交流~

你可能感兴趣的:(git多账号配置 SSH)