如何在有和没有 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 身份验证