Git:致命错误:无法从远程仓库读取

623

我想要使用http://danielmiessler.com/study/git/#website来管理我的网站,现在正尝试设置git。

按照指示,我已经完成了最后一步:git push website +master:refs/heads/master。

我在win7中使用git ming32命令行进行工作。

$ git push website +master:refs/heads/master
Bill@***.com's password:
Connection closed by 198.91.80.3
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.

这里可能存在一个问题,即程序正在寻找Bill@***.com。当我通过ssh连接到我的站点时,我的用户名不同(假设为“abc”)。因此,也许应该是abc@***.com。如果是这样的话,我不知道如何更改,或者是否可以使用别名推送。


2
我曾经遇到过同样的问题,有时候出现这个错误是因为git服务器无法访问或者出现了“内部服务器错误”之类的问题。 - Morteza
6
请先查看.git/config文件,确保一切都是正确的。对我来说,它的set-url和origin值是错误的。 - mixdev
在我的情况下,我不得不关闭我的WiFi并重新打开它。其他互联网服务都可以使用,包括fast.com,但由于某种原因,GitHub的操作无法正常工作。 - Joshua Pinter
这篇文章提供了很多答案。对于我同时使用工作和个人Git帐户的SSH问题,这篇文章解决了我的问题。https://www.freecodecamp.org/news/manage-multiple-github-accounts-the-ssh-way-2dadc30ccaca/ - Stephane
在我的情况下,我输入了错误的远程URL。该错误与SSH身份验证失败无法区分。 - John Jiang
显示剩余8条评论
62个回答

523

你的SSH密钥很可能已从SSH代理中移除。

ssh-add ~/.ssh/id_rsa

其中id_rsa是与git仓库相关的ssh密钥。

更新

你可能会遇到“无法打开与身份验证代理的连接”错误,要解决这个问题,您需要首先启动代理:

eval `ssh-agent -s`

15
这对我很有用!我花了很长时间来尝试配置我的 ~/.ssh/config 文件,以便为不同的主机使用不同的密钥。我认为文件是问题所在。最后,可能是在为正确的主机使用正确的密钥时,密钥已被“移除”。所以 ssh-add ~/.ssh/theKeyInQuestion 让我重新运行这个 repo,我不知道密钥是如何被移除的,也不知道“移除”是什么意思,但至少我能够再次进行身份验证。对我来说,SSH 是一个完全的谜团,即使经过数月处理身份验证问题,仍有 SSH 代理问题需要注意! - Alex Bollbach
3
这对我解决了问题,但我不明白为什么会这样。以前它可以用,突然就不能用了,是不是有一个过程会从代理中删除密钥,可能是出于意外吗? - Miguel Stevens
7
在 MacBook 上,我使用 ssh-add -k ~/.ssh/id_rsa。 (注:该命令用于将 SSH 密钥添加到 ssh-agent 代理程序中,以便无需每次都输入密码即可连接远程服务器。) - Junior Usca
18
我收到了 Could not open a connection to your authentication agent. 的错误提示。 - Dan Dascalescu
7
请尝试使用“eval `ssh-agent -s`”来首先启动ssh代理。 - liuqi
显示剩余8条评论

300

我之前遇到过同样的问题...

我的 .git/config 文件里有

url = git@github.com:manishnakar/polymer-demo.git

我用另一个东西代替了它

url = https://github.com/manishnakar/polymer-demo.git 

现在它可以正常工作 :)


30
这个为什么排名不高?git@github对我完全无效。 - hlitz
8
如果仓库所有者没有设置ssh密钥,那么您可能会遇到这个问题。如提示所示,解决方法是改用https,或让仓库所有者设置ssh - RyanNerd
1
@smileham 这将远程链接从基于ssh的认证切换到https协议(如果需要,它会提示输入用户名/密码)。 - Vincent Chalmel
2
这是正确的答案,对我来说立即生效了。 - Kingston Fortune
43
这不是一个答案。它改变了您进行身份验证的协议。这不是解决ssh设置的方法,而是与您的git仓库通信的完全不同的方式。 - Marcin Pevik
显示剩余6条评论

167
您可以在远程URL的用户名前加上一个@,并指定SSH应该将哪个用户名发送到远程系统。
git remote set-url website abc@***.com:path/to/repo

3
有没有一种方法可以添加密码,这样我就不用一直输入它了? - user1592380
21
请编辑文件.git/config,其中包含远程URL参数。 - Sayanee
@user61629:我知道我来晚了,但是你应该考虑使用私钥/公钥对而不是密码。 - code_dredd
29
在Github上,你总是使用用户名“git”。例如:git@github.com:mayoff/uiimage-from-animated-gif.git Github会通过查看你发送的SSH密钥来确定你的身份。 - rob mayoff
1
这并不够清晰,我猜测的答案也行不通。 - SaidbakR
显示剩余4条评论

163

请确保你在.git/config文件中输入了正确的网址。

url = git@github.com:username/repo.git
如果这是您的第一次推送,您需要设置正确的上游。
$ git push -u origin master

你可以通过以下步骤查看所使用的密钥:

$ ssh -vvv git@github.com

回复应该包含类似以下内容:

debug1: Next authentication method: publickey
debug1: Offering RSA public key: ~/.ssh/id_rsa
...
You've successfully authenticated, but GitHub does not provide shell access.

同样可以在~/.ssh/config中定义SSH规则,例如基于别名:

   Host github
      HostName github.com 
      User git
      IdentityFile "~/.ssh/id_rsa"

   Host git
      HostName github.com 
      User git
      IdentityFile "~/.ssh/some_other_id"

您可以为每个别名设置连接到不同端口、使用不同用户名等选项。


1
谢谢!!在某个时候,当我克隆我的仓库时,URL 被设置为 https://github.com/user/repo.git (没有 git@github.com),因此它拒绝使用我的 SSH 密钥。也许是因为最初我用 Github for Windows 克隆了它? - Jedidja
该死,你真棒。我尝试了很多其他的解决方案。我的URL也是https的 :( - agrublev
啊啊啊,DeployHQ说:“BitBucket目前遇到了轻微的服务问题。请查看https://status.bitbucket.org了解更多信息。”太好了。 - Ryan
如果您正在尝试克隆一个仓库,但找不到.git/config文件怎么办? - Dan Dascalescu
非常好,感谢您的回答。我确实只在~/.ssh/config中定义了Host github.com设置,而我正在尝试访问gitlab.com - RAM237
显示剩余4条评论

36

我在ssh代理中有一个正确的私钥,但在Bitbucket上却有一个错误的ssh私钥。

首先删除了所有密钥

ssh-add -D

然后添加了正确的钥匙。

ssh-add ~/.ssh/id_rsa

什么是id_rsa? - S.M.Fazle Rabbi
1
@S.M.FazleRabbi 当您创建 SSH 密钥时,id_rsa 是密钥文件的默认名称。 - Jacob
当然,你的密钥可能不叫做 id_rsa,在这种情况下请使用你密钥的名称。 - Felix Eve
对我来说很有效!我有两个不同的SSH密钥,用于不同的GitHub空间。 - adrisons

30
确保ssh-agent正在运行,通过在终端上执行以下命令:
eval $(ssh-agent -s)

来源:Github文档


这也解决了我的问题。谢谢。 - Ahmad
这也解决了我的问题。未来是否有什么我应该做的,以确保它继续运行?例如将其作为.zshrc文件中的条目? - Brady Dowling
这对我来说解决了问题。 - Phillip

28
这通常是由于SSH密钥与远程不匹配引起的。 解决方案:
  1. 打开终端并输入以下命令(Mac,Linux),将“you@email.com”替换为您的电子邮件地址。

    ssh-keygen -t rsa -C "your@email.com"

  2. 使用以下命令复制生成的密钥,从单词ssh开始。

    cat ~/.ssh/id_rsa.pub

  3. 将其粘贴到github、bitbucket或gitlab中,具体取决于您的远程位置。
  4. 保存它。

28
尝试使用 unset GIT_SSH 命令删除 GIT_SSH 环境变量。这是我问题的原因。

1
可以工作了,我想知道GIT_SSH环境变量是从哪里来的 :) - StrangeLoop
1
对于Windows系统,请从高级选项菜单中删除GIT_SSH环境变量。这对我起作用了。 - splintercell
怎么做?我在终端里写什么来完成这个任务? - Agent Zebra
问题也被我解决了。 - GalAbra
也为我解决了问题。但是为什么这会导致问题呢? - wilmol
这对我也有用。我使用Cygwin作为首选终端。它有自己的ssh.exe文件,已经正确配置并且运行良好。我怀疑Cygwin会查找GIT_SSH变量,并在存在时使用它。最近我在Windows机器上安装了Git(而不仅仅是在Cygwin中)。Git安装程序设置了GIT_SSH使用Plink.exe,但可能没有像我的Cygwin那样进行配置。一旦我删除了GIT_SSH,Cygwin就恢复正常了。 - Tanoro

20

我遇到了同样的问题。

这个错误意味着你没有指定你的代码将要推送到哪个远程URL地址。

你可以通过以下两种方式来设置远程URL地址:

  1. 通过在Git Bash上执行命令指定远程URL地址。

    • 进入你的项目目录

    • 打开Git Bash

    • 执行以下命令:

      • git remote set-url origin <https://abc.xyz/USERNAME/REPOSITORY.git>
  2. 直接在配置文件中提及远程URL地址

    • 进入你的项目目录

    • 进入.git文件夹

    • 用文本编辑器打开config文件

    • 复制并粘贴以下内容

      • [remote "origin"] url = https://abc.xyz/USERNAME/REPOSITORY.git fetch = +refs/heads/*:refs/remotes/origin/*

获取更详细信息,请访问此链接


1
非常感谢!我尝试了所有方法,最终这个起作用了。 - erics15

12
另一个解决方法:
有时由于网络问题,我会遇到这个问题。我不完全理解根本问题是什么,但切换到不同的子网络或使用VPN可以解决它。

正是我的情况。希望我早点看到这个评论。调试了几个小时后,想到使用 VPN,结果奏效了。 - Chaitanya Bapat
对我来说,只是“再试一次”就解决了。不知道出了什么问题。 - Daniel Griscom

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接