git多账号登录问题解析_linux shell

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

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

PS:Git多个账户冲突问题解决

由于自己有两个github账号,最近在push项目时,突然发现一直提示的permission denied. 细看原来是用的另外一个github的账号,不是当前origin所在的github对应的账号。于是查找了一stackoverflow上面的解决方http://stackoverflow.com/questions/14689788/multiple-github-accounts-what-values-for-host-in-ssh-config。

清除git的全局设置

git config --global user.name "your_name"
git config --global user.email "your_email"

然后重新设置每个项目的非全局的用户名和邮箱:

git config user.name "your_name"
git config user.email "your_email" 

SSH配置

在~/.ssh目录下面,使用ssh-keygen -C “your_email” -t rsa 生成公私秘钥,当有多个github账号的时候,可以生成多组rsa的公司密钥。然后配置~/.ssh/config文件(如果没有的话请重新创建一个):

#第一个github项目账号
Host first_project
HostName github.com
User first_user
IdentityFile ~/.ssh/id_rsa_first
#第二个git项目账号
Host second_project
HostName github.com
User second_user
IdentityFile ~/.ssh/id_rsa_second 

从first项目拉取代码:

git pull first master

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索git多账号登录
git shell 登录、linux shell 解析json、linux shell 参数解析、linux shell 解析xml、linux git 登录,以便于您获取更多的相关知识。

时间: 2024-10-31 10:45:26

git多账号登录问题解析_linux shell的相关文章

shell脚本实现ssh自动登录功能分享_linux shell

文件名:ssh_auto_login 复制代码 代码如下: #!/usr/bin/expect### ssh模拟登陆器## @author zhiyuan <hzyhouzhiyuan艾特gmail.com>##if {$argc<4} { puts "Error params: $argv" puts "Expect params :user passwd ip port [translate_id]" exit 1} set default_p

脚本实现SSH登录邮件报警_linux shell

登录保护是一个非常重要的环节,下面通过图文并茂的方式给大家详细讲解下: 前两天@cyy 给我发了一个图 然后我就想到USHQ的ssh登录app通知功能,然后就像如果把这个部署到自用的服务器就好了.至少多一层安全系数. 首先要感谢@Legion 帮忙搞定了几个错误以及搞定了Geo2IP的JSON转换. (P.S.此人为自动化运维大神级人物,现任职于德国一数据统计企业.) 当然,我和他相比我就是战五渣了...大家一定要多向 @Legion 学习啊~~ 说下需要做的准备: sendmail或者Post

实现shell终端代码分享(可用户登录 实现系统命令)_linux shell

复制代码 代码如下: #include"apue.h" int userlogin(struct passwd **); int main(){ int ret,i=0; long ret_cwd; struct passwd *pw; char buf[128],hostname[16],usercwd[128]; char *ptmp1;  do{  ret = userlogin(&pw); }while(ret != 1);  getchar();  while(1){

shell自定义函数及参数调用解析_linux shell

一.定义函数 复制代码 代码如下: function fname(){statements;} 或 复制代码 代码如下: fname(){statements;} 二.调用函数 只需要使用函数名,即可调用某个函数:$ fname ; #执行函数 可以传递参数给函数,并由脚本进行访问:fname arg1 arg2; # 传递参数 以下是函数fname的定义.在函数fname中,包含了各种访问函数参数的方法. 复制代码 代码如下: fname(){  echo $1, $2; # 访问参数1和参数

零基础入门篇之Linux及Arm-Linux程序开发笔记_linux shell

前言:本文记录了自己从一个完全不懂Linux的人如何一步步学会Linux程序开发的过程.当然也希望本文能够达到它的目的,让那些和我一样没有任何基础的人也能快速入门Linux程序开发. 一.Arm-Linux程序开发平台简要介绍     Arm-Linux程序的开发并不像我们以前接触的Windows程序开发那样,关于平台的搭建就繁琐很多,所以在正式进入程序开发之前先对这种开发模式进行简要介绍,让一个即使没有任何Linux开发经验的程序员也能够看懂后面的内容. 1.1程序开发所需系统及开发语言   

开心网的账号登录及PHP api操作

开心网 的账号登录及api操作,使用oauth 2.0                 官方提供的sdk都太过庞大,这是我自己简化的,提供简单的账号登录.获取个人信息.发布记录等功能,如果需要其他功能可以根据官方的api文档自行添加   001 <?php 002 /** 003  * PHP Library for kaixin001.com 004  * 005  * @author PiscDong (http://www.piscdong.com/ http://wwww.php100.

人人网的账号登录及 PHP api操作

  人人网 的账号登录及api操作,使用oauth 2.0 官方提供的sdk都太过庞大,这是我自己简化的,提供简单的账号登录.获取个人信息.发布微博等功能,如果需要其他功能可以根据官方的api文档自行添加   [文件] renren.php 001 <?php 002 /** 003 * PHP Library for renren.com 004 * 005 * @author PiscDong (http://www.piscdong.com/ www.php100.com) 006 */

豆瓣的账号登录及PHP api操作

  豆瓣 的账号登录及api操作,使用oauth 2.0                 官方提供的sdk都太过庞大,这是我自己简化的,提供简单的账号登录.获取个人信息.发布分享等功能,如果需要其他功能可以根据官方的api文档自行添加   [文件] douban.php  01 <?php 02 /** 03  * PHP Library for douban.com 04  * 05  * @author php100 (http://www.php100.com/) 06  */ 07 cl

新浪微博的账号登录及PHP api操作

  新浪微博 的账号登录及api操作,使用oauth 2.0     官方提供的sdk都太过庞大,这是我自己简化的,提供简单的账号登录.获取个人信息.发布微博等功能,如果需要其他功能可以根据官方的api文档自行添加    [文件] sina.php 001 <?php 002 /** 003  * PHP Library for weibo.com 004  * 005  * @author PiscDong (http://www.piscdong.com/) 006  */ 007 clas