如何在有和没有 ssh 身份验证的情况下将 Git 与两个不同的存储库一起使用?

Posted

技术标签:

【中文标题】如何在有和没有 ssh 身份验证的情况下将 Git 与两个不同的存储库一起使用?【英文标题】:How to use Git with two differents repositories with and without ssh authentification? 【发布时间】:2016-12-06 07:24:26 【问题描述】:

我有一个问题:

我必须与项目合作:

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

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

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

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

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

$ git remote -v

来源http://xxxx/yyyy-tools/yyyy-demat-purge.git(获取)

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

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

$ git remote -v

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

来源 git@myIp:/repository/yyyy/yyyy-order-parent.git(推送)

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

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

$ git remote -v

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

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

$ git fetch 来源

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

git@ip 的密码:

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

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

这里是非gitlab~/.ssh/config文件的内容

主机 DEV_XX1

主机名 DEV_XX1

用户 gitUser

身份文件 /home/hostUser/.ssh/id_rsa

IdentitiesOnly 是的

托管我的IP

用户主机用户

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

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

谢谢!

【问题讨论】:

您能否为您的两个存储库添加git remote -v 的输出? 您为每个存储库使用哪些协议? The Protocols。根据这一点,它可能是ssh 配置事物或git 配置事物^^ @jibe 我刚刚编辑了我的帖子 :) @AnimiVulpis 的答案相同 那么在 non-gitlab 服务器上,错误将 GitLab: 放在前面?您是否尝试使用~/.ssh/config 文件配置ssh 【参考方案1】:

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

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

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

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

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

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

【讨论】:

感谢您的回复。正如您在我刚刚编辑的帖子中看到的那样,gitlab 存储库的远程 url 在 HTTP 中,并且对另一个存储库使用 SSH。 但是,作为参考,在我刚刚使用没有 gitlab 使用 SSH 的存储库之前,它运行良好...... 我可能需要更多信息来挖掘,在您输入“输入密钥'/c/Users/my_user/.ssh/id_rsa'的密码短语”的释义后,您是否能够继续拉,推? 我已经尝试反转两个存储库之间的协议,现在我可以通过 SSH 很好地访问 gitlab 存储库。但是,当我尝试通过 HTTP 访问另一个存储库时,弹出一个询问身份验证的弹出窗口似乎将我自己记录到存储库中......但我没有任何用户或密码......并回答您的最后评论:是,一旦通过 ssh 加入 gitlab 存储库,我就成功推送提取等。 我想我明白了,有两种方法可以解决这个问题 1. 使用 http 使用 "remote set-url" 命令作为我上面的答案,将您的 url 更改为 http 2. 使用 ssh - 首先你需要生成一个公钥/私钥对 - 然后将公钥存储到 git 服务器(如果你的 git 服务器支持它) - 创建一个具有以下内容的 ~/.ssh/config 文件:主机主机名 host_ip 主机名 host_ip IdentityFile ~ /.ssh/privatekey 用户你的用户名 这样,authentication 会自动处理

以上是关于如何在有和没有 ssh 身份验证的情况下将 Git 与两个不同的存储库一起使用?的主要内容,如果未能解决你的问题,请参考以下文章

如何在有和没有支持的情况下在 ListVIew 中使用 MultiChoiceModeListener?

如何在 Windows 上删除 git bash ssh 身份验证

如何在没有登录表单的情况下将摘要身份验证与 asp.net web api 和 angular js 一起使用?

在有和没有用户上下文的情况下调用 REST API

Git SSH 身份验证

在有和没有大小写的情况下对数组中的相似单词进行计数[关闭]