问题描述
公司要求项目的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
- 生成新key,把
ylp@xxx.com
替换成自己的邮箱
$ ssh-keygen -t rsa -C"ylp@xxx.com"
-
这时会让你输入将要新生成的key的名称,我输入了id_rsa_work,然后回车
后边是两次提示输入密码,都直接回车就行
这时就会出现创建成功的提示了
再次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链接来克隆公司项目的代码了
多账号配置
按照刚才对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地址git@gitee.com: workTest.git
,所以公司账号下的Host我写的是gitee.com
那么我oschina的个人账号就不能再写gitee.com
,否则git校验key的时候还是区分不开的,因此我把它改为了giteeYLP.com
注意
1)项目地址更改
因为host改了,相应的我们在克隆项目的时候,ssh的地址也是需要改的,比如我YLP账号下的一个项目ssh地址是git@gitee.com:meTest.git
,那么克隆的时候我需要把它改为:git@giteeYLP.com:meTest.git
,这样就不再提示这是一个无效的源路径/URL了,成功克隆
2)校验
我不明白为什么oschina官方文档写的是输入ssh -T git@git.oschina.net
进行校验,因为我所有的项目都是git@gitee.com
开头的,因此才有了上述的配置
因此我Tony账号是这么校验的:
$ ssh -T git@gitee.com
YLP账号是写的giteeYLP.com
$ ssh -T git@giteeYLP.com
终端都分别提示了:
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 git@github.com
终端输出如下说明成功了:
Hi splsylp! You've successfully authenticated, but GitHub does not provide shell access.
刷新https://github.com/settings/keys这个页面,会发现秘钥的小钥匙图标由灰色变成绿色了,说明生效了~
这时候就可以直接把github上的项目也通过ssh进行pull、push了。。。
以上就是我实践总结的配置方法,亲测没有问题,如有问题或者更好的方法欢迎指正交流~