Git:权限被拒绝(publickey)致命错误 - 在克隆Git存储库时无法从远程仓库读取。

237

我无法克隆 Git 存储库,出现以下错误:

krishna.soni@KRISHNACHANDRAS /c/Projects $ git clone http://stage.abc.com:10088/pqr
http://<url>/<repository> Cloning into '<repository>'... fatal: could not read Username for 'http://<url>': No such file or directory

我已经阅读了Bitbucket,Windows和“fatal: could not read Password for”,但仍然存在问题。

我继续进行,但现在出现了这个错误。

sh.exe": chown: command not found

krishna.soni@KRISHNACHANDRAS /c
$ git clone ssh://krishna.sonipayu.in@stage.payupaisa.
/projects
Cloning into 'C:/projects'...
Permission denied (publickey).
fatal: Could not read from remote repository.

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

> krishna.soni@KRISHNACHANDRAS /c
>     $ git clone ssh:<url>
>     ts
>     Cloning into 'C:/projects'...
>     Permission denied (publickey).
>     fatal: Could not read from remote repository.

Please make sure you have the correct access rights

并且仓库存在。


你确定这是一个 Git 仓库吗? - gravetii
是的,没错。我对Git还很陌生,在克隆时遇到了这个错误。我使用以下命令在全局配置文件中添加了电子邮件和姓名: git config --global user.name "John Doe" $ git config --global user.email johndoe@example.com - KCS
主要原因是repo无法将您识别为git服务器上的用户。您能通过ssh访问服务器吗? - Малъ Скрылевъ
如果有人在使用Github时遇到此问题,请按照此处提到的步骤操作:https://help.github.com/en/articles/generating-a-new-ssh-key-and-adding-it-to-the-ssh-agent。这对我很有效。 - Rounak
问题出在ssh密钥上,因为你正在使用ssh,所以需要一个与git仓库匹配的ssh密钥。为此,请按照以下命令操作:1. ssh-keygen,一直按回车键直到ssh密钥生成。2. 从位置“Your public key has been saved in <Loc>”复制ssh密钥 cat <Loc>。3. 现在在github中,转到个人资料-->设置-->ssh和gpg密钥并添加新的ssh密钥并保存。4. 现在再次克隆即可。 - rich
35个回答

298

如果您只是想获取存储库而不关心协议(ssh / https)的人,您可能只需要使用 https 而不是 ssh(如果支持的话)。

所以例如您可以使用:

git clone https://github.com/%REPOSITORYFOLDER%/%REPOSITORYNAME%.git

取代

git clone git@github.com:%REPOSITORYFOLDER%/%REPOSITORYNAME%.git

请注意,GitHub已经弃用了密码验证(https登录)用于私有存储库,因为它无法跟上最新的安全标准,请使用个人访问令牌

同时请注意,自2022年3月1日起,Bitbucket用户也不能再使用Atlassian帐户密码进行git over https验证,而需要使用Bitbucket 应用程序密码


9
如果SSH权限问题无法解决或者您想跳过该步骤,这是最合适的备选方案。 - Wahib Ul Haq
59
这个答案改变了从sshhttps的机制。这并没有通过使用ssh来访问存储库来解决原始问题。我想知道为什么这个答案一直被投票为好答案。下面的其他答案是正确解决问题的。 - Armin
9
原问题是一个 Git 新手尝试克隆一份代码库。如果目标是获取一个公共代码库,这是最快有效的答案。 - Vivek Chavda
3
不再支持使用Https克隆私有存储库 - 只支持SSH或PAT。这个答案应该澄清Https只可靠于公共存储库。 - Stardust
  1. 创建应用程序密码 - 授予所有权限
  2. 将远程URL更改为https对应项
  3. 拉取/推送/提交 - 当要求输入密码时,请提供第2步获取的密码
- Aftab Ahmed
如果您在使用Bitbucket时遇到问题,这里是相关链接。 https://support.atlassian.com/bitbucket-cloud/docs/set-up-an-ssh-key/ - Dilip

152

如果在创建SSH并将其添加到您的Bitbucket帐户或其他地方后,访问仍然存在问题,则需要在GitBash、OSX或Linux终端上执行以下操作:

# Lists already added identities (‘ssh keys’)
ssh-add -l

如果您没有看到您的密钥,请使用以下方式添加(将identity替换为实际名称):

# Add a new identity
ssh-add ~/.ssh/identity

这对我起作用了。


5
执行 ssh-add ~/.ssh/identity 出现错误,错误信息为 /Users/lee/.ssh/identity: No such file or directory,意思是文件或目录不存在。 - lee
17
在“/.ssh”目录下运行“ssh-add”命令(并在提示时输入“/.ssh/id_rsa”文件的密码)解决了我的问题。 - James Furey
5
使用以下命令加载SSH代理并添加您的私钥:eval $(ssh-agent) ssh-add ~/.ssh/<private_key> - Îsh
9
经过长时间的尝试和汗水,这个方法对我奏效了。唯一需要注意的是,最后不要使用“identity”,而是在您自己的系统中使用名称。通过终端中的cd命令进入.ssh文件夹,然后在终端中键入'ls'命令。然后将上面命令中的“identity”替换为您自己的文件名。在Sourcetree终端中执行以下步骤: 输入cd ~并回车 输入cd .ssh并回车 输入ls并回车 复制没有“.pub”扩展名的文件名 输入以下命令:ssh-add ~/.ssh/(复制的文件名) - Tejas
1
如果在添加身份验证时出现以下错误:“无法打开到您的身份验证代理的连接。”请尝试先启动ssh-agent:eval "$(ssh-agent -s)" - Alika Matthew
显示剩余11条评论

76

看起来是一个权限问题 - 不是Windows 7的问题。

你的ssh密钥没有授权 - Permission denied (publickey)

你需要创建一个公共SSH密钥并请求Git仓库管理员添加ssh公共密钥。

如何执行此操作的信息: 保存ssh密钥失败


38
很奇怪,这个代码库是公开的,我正在克隆公开的代码库。我不确定为什么我应该向在Github上托管他/她的公共代码库的管理员请求克隆许可。 - Shailen
6
是的,这是错误的,你不需要问管理员任何问题,这是本地git的问题。 - Ivan Castellanos
4
为什么会这么难?我成功了,但并不是毫无痛苦。 - Niklas Rosencrantz
13
对于公共仓库,您无需授权密钥,只需使用HTTPS协议即可:https://dev59.com/D2Ei5IYBdhLWcg3wd8Ku#33072867 - Diego V
1
感谢@First Zero,我一直在解决这个问题。首先我设置了SSH-Agent,然后将密钥添加到SSH Agent中(您可以使用此链接https://www.toolsqa.com/git/clone-repository-using-ssh/),然后我从生成的文件中复制了密钥,并在Bitbucket中的个人资料设置中创建了SSH密钥。 - Monica

46

我在使用GitHub时遇到了同样的问题。以下是解决方法!

  1. 按照这里描述的方式在计算机上生成SSH密钥:生成SSH密钥
  2. 登录您的GitHub帐户:GitHub登录
  3. 在您的账户中,添加新生成的SSH密钥:我的账户 SSH keys
  4. 再次尝试 git clone 项目。

运行得非常顺利! - unknown_boundaries
4
在过去的五年中,我已经在三个新操作系统上使用了这个答案,每一次都完美地运行。 - kotoole
这并没有给出问题的解决方案,它只是链接到文档。在第三步之后,ssh -T git@github.com 可以正常工作,但 git clone 失败了。 - Stardust
太好了,我解决了我的问题。由于我使用了自己的ssh配置,所以我必须执行git clone myconfig:user/repo.git。这是我犯的一个愚蠢的错误。 - Stardust
1
如果有人发现这个答案不起作用,你可能需要重新启动你的机器。这帮助我解决了我的问题。 - Sta_Doc
显示剩余2条评论

23

我在Mac上遇到了这个问题 - 在正确设置SSH以访问我的Git存储库后,重新启动后(并且Mac处于待机状态一段时间后),所有凭据都被删除了。显然,由于某种原因,pub密钥设置为644,这导致它从钥匙链中删除。要重新添加:

  • chmod 600 公钥
  • ssh-add ~/.ssh/[您的私钥] - 这应该显示已添加身份验证。您想要的密钥文件是没有.pub扩展名的那个。
  • ssh-add -l 应该会显示您新添加的身份验证

编辑:显然,MacOS有删除密钥的倾向 - 下载High Sierra更新后(但我尚未安装),我的密钥已被删除,我必须通过ssh-add再次添加它。


2
在将macOS High Sierra升级到10.13.1版本后,此解决方案仍然准确。具体而言,当我尝试将提交推送到远程存储库时,Sourcetree是出现问题的应用程序。上述步骤为我解决了这个问题。 - Paul Bonneville
我在10.13.4上遇到了这个问题,这个解决方案对我有效。 - Andrew Ebling

17

对于我而言,当我想从我的存储库中克隆时,我遇到了之前注意到的相同信息“Permission denied (publickey) fatal: Could not read from remote repository”。 我的解决方案是不要在克隆之前使用sudo。就是这样。


13

我也遇到了同样的问题。我采取了以下措施并解决了这个问题:

  1. 在Windows上使用GIT GUI客户端生成密钥,将此密钥复制到剪贴板。
  2. 打开你在bitBucket/ git网站上的账户,并将此密钥添加到你的个人资料中。这样,服务器就知道你是从合法系统访问的合法用户。
  3. 就这样。之后所有的推送命令都能正常工作。

这让我看到我在没有以管理员身份运行Git Bash的情况下生成了我的RSA,这将我的RSA密钥放置在“h”驱动器中 :oops: - tylerlindell
绝对是Windows中最好的选择。 - Tim

10

我曾经遇到过类似的问题。我更换了ssh密钥并重启了所有其他的解决方案,但对我来说实际问题是我们的gitlab默认协议从ssh改为https。

使用以下命令检查远程url:

git remote -v

更改远程URL

git remote set-url origin https://URL

很好,我们不需要配置ssh。 - Rohit Parte
我也不得不这样做。在这种情况下,我的ssh密钥无法工作。 - Dani
致命错误:无法访问'https://bitbucket.org:xxxxxx/xxxxxxxxt/':端口号以'r'结尾。 - nosequeweaponer
我曾经遇到过类似的问题。我的ssh密钥已经正确配置,但是我观察到的唯一区别是克隆仓库时使用了不同的协议。将其设置为https对我有用。 - ganesh phirke
这种方法对我来说完美地运作了。将远程起点从git@替换为https://。 - zeropsi

8

Github(或Bitbucket)无法在其服务器上找到您的ssh密钥。

只需在您的帐户设置中添加您的密钥即可。


7

对于 Fedora 33+ 和 Bitbucket 用户:

出现此问题是因为哈希算法过时。如 Bitbucket 上所述,有两个选择:

选项1:

将以下内容添加到 ~/.ssh/config 文件中(如果该文件不存在,请创建它)。

Host bitbucket.org
  PubkeyAcceptedKeyTypes +ssh-rsa

选项2:

使用更安全的算法。

ssh-keygen -t ed25519 -C "your_email@example.com"

接受的密钥类型行对我起作用了! - tpb261

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