如何使用带有和不带ssh身份验证的两个不同存储库的Git?

时间:2016-08-01 09:14:04

标签: git authentication ssh gitlab

我遇到了问题:

我必须与项目合作:

  • 第一个是本地gitlab,需要ssh身份验证
  • 第二个是在一个简单的git服务器上(没有gitlab或类似的其他工具),不需要ssh身份验证

当我正在使用gitlab的项目时,一切都很好,但当我试图拉动,推送,获取不在gitlab服务器上的项目时:git bash返回:

  

输入密钥'/c/Users/my_user/.ssh/id_rsa'的密码:

但我不需要任何ssh身份验证!

当我为gitlab项目运行git remote -v时,git bash返回:

  

$ git remote -v

     

origin http://xxxx/yyyy-tools/yyyy-demat-purge.git(fetch)

     

origin http://xxxx/yyyy-tools/yyyy-demat-purge.git(推送)

当我为其他仓库运行git remote -v时(不是在gitlab上),它会返回:

  

$ git remote -v

     

origin git @ myIp:/repository/yyyy/yyyy-order-parent.git(fetch)

     

origin git @ myIp:/repository/yyyy/yyyy-order-parent.git(push)

所以我认为这不是一个远程配置问题......

当我试图绕过ssh身份验证的问题来访问不在gitlab上的存储库时,git bash返回:

  

$ git remote -v

     

origin git @ ip:/repository/yyyy/yyyy-order-parent.git(fetch)

     

origin git @ ip:/repository/yyyy/yyyy-order-parent.git(推送)

     

$ git fetch origin

     

输入密钥'/c/Users/user/.ssh/id_rsa'的密码:

     

git @ ip的密码:

     

GitLab:找不到您要找的项目。   致命的:无法从远程存储库读取。

     

请确保您拥有正确的访问权限   存储库存在。

以下是非gitlab 〜/ .ssh / config文件的内容

  

主机DEV_XX1

     

HostName DEV_XX1

     

用户gitUser

     

IdentityFile /home/hostUser/.ssh/id_rsa

     

IdentitiesOnly yes

     

主持myIp

     

用户hostUser

     

ProxyCommand ssh deploy @ myIp -W%h:%p

如何解决此问题?我认为它可以存在配置解决方案,但是哪一个?

谢谢!

1 个答案:

答案 0 :(得分:3)

问题在于,在你的第二个项目中,远程url可能被设置为ssh url,类似于git @ ip / ....(运行命令:" git config -l"看,注意" remote.origin.url =")

您需要将网址编辑为使用http或git服务器提供的其他协议的网址。使用以下命令编辑:

git remote set-url origin https://yourusername@servername/username/project.git

总之,有两种方法可以解决这个问题。首先,使用" remote set-url"命令作为上面的答案,将您的网址更改为http。其次,使用ssh身份验证。您需要生成公钥/私钥对,然后将公钥存储到git服务器(如果您的git服务器支持它)。最后,创建一个带有以下内容的〜/ .ssh / config文件:

Host hostname host_ip 
HostName host_ip 
IdentityFile ~/.ssh/privatekey
User yourusername

这样,身份验证将自动处理