git多帐号登陆问题

做者:白狼 出处:http://www.manks.top/git-multiply-accounts.html 本文版权归做者,欢迎转载,但未经做者赞成必须保留此段声明,且在文章页面明显位置给出原文链接,不然保留追究法律责任的权利。html

什么意思呢?想问的人天然知道,不懂的人说了他也是不知道滴。git

同一服务器,同一托管平台,多个帐号问题bash

一、添加key服务器

咱们暂且以oschina为例。为了更好的说明问题,咱们在oschina平台分别用帐号111新建项目test111和帐号222新建项目test222,记得项目私有化哦,否则咱们也没啥说的了。ssh

在咱们想要把项目test111 clone下来以前,须要先按照下面的步骤设置关联的keygitlab

ssh-keygen -t rsa -C "111@163.com" // 邮箱是帐号111对应的邮箱

整个过程就回车完事,操做起来那是至关的简单!可是还没完,可能你注意到了,回车的过程当中,有一句话是这样提示的:测试

Your public key has been saved in /root/.ssh/id_rsa.pub.

没错,咱们如今打开这个文件.net

cat /root/.ssh/id_rsa.pub

拷贝文件里面的内容, 而后打开 http://git.oschina.net/keys 这个页面,新建key,把复制的内容粘贴进来就行了。code

这样一来,咱们就把服务器上面的key跟oschina平台进行了关联。htm

二、clone项目

接着咱们经过git clone命令把test111项目clone下来,记得clone的地址是ssh而不是https哦,这个时候会提示咱们输入用户名和密码,其分别是oschina的帐号和密码。

若是你手贱是以https的方式进行clone的,能够经过下面的命令从新设置远程仓库地址(没有则可跳过此步骤)

// 移除以前的远程仓库地址
git remote remove origin
// 新增远程仓库地址为ssh,非https
git remote add origin git@git.oschina.net:wwolf/test111.git

三、多帐号兼容问题

到这里,对于test111项目pull push操做基本上都是没有问题的了。若是说用户222想在这台服务器上面对项目test222进行管理,咱们直接执行git clone git@git.oschina.net:222/test222.git以后,报错了,提示以下:

Access denied.
fatal: Could not read from remote repository.
Please make sure you have the correct access rights
and the repository exists.

为何呢?首先最重要的问题确定是key的问题了!由于咱们以前并未层在这台服务器增长key关联到用户222的oschina帐号!那咱们就按照步骤1从新在服务器上为用户222添加一个key吧,不过须要注意的是,咱们的key保存的文件要重命名了,否则可就把用户111建立的key覆盖了!

ssh-keygen -t rsa -C "帐号222的邮箱@qq.com"
//接下来会提示咱们想要把key保存在哪一个文件,从新输入文件名便可
Enter file in which to save the key (/root/.ssh/id_rsa): /root/.ssh/id_rsa_2
//接着回车回车回车完事,重要的话说三遍!

而后咱们登陆帐号222的oschina帐号添加key
可是问题出现了,这个时候咱们从新clone test222依旧提示咱们没权限,怎么回事???本篇文章的中心主题曝光了!废话了一堆,开始说重点--------------------------

其实这个时候咱们clone test222项目时,git是拿默认的id_rsa.pub文件里面的key去对比的,这确定是有问题的嘛,由于222帐号并无添加这个key!那也就是说咱们这里若是clone test222的时候让git拿着id_rsa_2.pub文件里面的key去验证不就完事了么?是的,就是这样!咱们看实现步骤:

首先咱们让git识别咱们新增的key

ssh-agent bash
ssh-add ~/.ssh/id_rsa_2

接着咱们在~/.ssh/ 目录下新建或者修改config文件

#Host 是你远程仓库的地址,注意哦,若是有些服务器作的ip端口转发,这里不要带上端口号
Host git.oschina.net
#HostName 是远程仓库的地址,一样若是作的端口转发也不该带端口号
HostName git.oschina.net
#Port 端口号,若是有作转发须要在这里填写端口号,没有就没必要要填
#Port 8800
#用户
User 111
#识别key的文件
IdentityFile ~/.ssh/id_rsa

#都指向同一个平台的话,下面的Host须要作个处理,由于咱们在用这个key的时候根据Host从上到下进行查找,不作修改确定会先查找到第一个key,依旧无效,随便改就行了,其余参数不作特殊处理
Host git222.oschina.net
HostName git.oschina.net
#Port 8800
User 222
IdentityFile ~/.ssh/id_rsa_2

能够看到,咱们对222用户的Host作了处理,那么咱们就须要修改下222的远程仓库地址了

// 原仓库地址
git@git.oschina.net:222/test222.git
// 修改成
git@git222.oschina.net:222/test222.git

也就是说这个时候用户222只须要执行命令

git clone git@git222.oschina.net:222/test222.git

就能够了!就能够了!!!

cd test222/
//发现git pull git push也都没有任何问题

同一服务器,不一样托管平台,多个帐号问题

这多个平台的问题基本上就简单了,为了举例说明,咱们用gitlab平台的333帐号的项目test333进行测试,注意哦,咱们是注册第三个帐号在上面两个帐号的基础之上进行的测试

git clone git@gitlab.com:333/test333.git
// 可想而知,一样是没权
由于没那么多邮箱,咱们注册gitlab依旧使用的是用户222的邮箱,不过这对咱们的操做没任何影响,无非就是多建立一个id_rsa_3文件而已,鉴于此,咱们直接拷贝id_rsa_2.pub里面的key到gitlab平台。

而后在~/.ssh/config文件内添加gitlab平台的配置便可

Host gitlab.com
HostName gitlab.com
#Port 8800
User 333
//由于gitlab的邮箱跟用户222一致,这里用这个key,若是不一致,你仍然须要生成新的key,这里引用新的key文件
IdentityFile ~/.ssh/id_rsa_2

回过头来看看,git多帐号的问题不难操做嘛,完美解决!
查看原文

相关文章
相关标签/搜索