zoukankan      html  css  js  c++  java
  • git多账号登录问题

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

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

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

    1、添加key

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

    在我们想要把项目test111 clone下来之前,需要先按照下面的步骤设置关联的key

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

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

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

    没错,我们现在打开这个文件

    cat /root/.ssh/id_rsa.pub

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

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

    2、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

    3、多账号兼容问题

    到这里,对于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多账号的问题不难操作嘛,完美解决!查看原文

  • 相关阅读:
    composer在phpstorm中安装代码库
    [C#]WinForm 中 comboBox控件之数据绑定
    【建模+强连通分量】POJ1904 King's Quest
    【构造】UVa 11387 The 3-Regular Graph
    【环套树+树形dp】Bzoj1040 [ZJOI2008] 骑士
    【强连通分量+spfa】Bzoj1179 Apio2009 Atm
    【树形dp】Bzoj3391 [Usaco2004 Dec]Tree Cutting网络破坏
    【dfs+连通分量】Bzoj1123 POI2008 BLO
    【强连通分量+概率】Bzoj2438 杀人游戏
    【强连通分量】Bzoj1194 HNOI2006 潘多拉的盒子
  • 原文地址:https://www.cnblogs.com/wwolf/p/5717060.html
Copyright © 2011-2022 走看看