git@github.com: 权限被拒绝(公钥)

73

我创建了一个新的远程仓库,并尝试使用git push -u origin master命令将我本地的文件推送到新的仓库。但是,在我addcommit之后,它弹出以下错误:git@github.com: Permission denied (publickey). fatal: Could not read from remote repository.如何解决这个致命错误?

我尝试过如何解决使用 Git 时的"Permission denied (publickey)"错误?,但是此链接中的问题似乎发生在第一次使用 Git 时。我已经使用我的 Git 一段时间了,我还需要遵循此解决方案吗?是否有更具体的解决方案?

这是我收到的致命错误。

C:\Users\ASUS\Desktop\React-Practice App\my-app>git status
On branch master
nothing to commit, working tree clean

C:\Users\ASUS\Desktop\React-Practice App\my-app>git push -u origin master
git@github.com: Permission denied (publickey).
fatal: Could not read from remote repository.

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

可能是[GitHub错误信息 - Permission denied (publickey)]的重复问题(https://dev59.com/UGcs5IYBdhLWcg3wVyel)。 - phd
https://stackoverflow.com/search?q=%5Bgit%5D+Permission+denied+publickey - phd
12个回答

84

您正在通过SSH访问GitHub。首先生成一个SSH密钥对,然后将公钥添加到GitHub。

生成密钥对时,GitHub更喜欢使用“Ed25519算法”。

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

它仍然允许在不支持Ed25519的系统中使用rsa。

ssh-keygen -t rsa -b 4096 -C “youremail@example.com”

更多信息请参见https://help.github.com/en/articles/generating-a-new-ssh-key-and-adding-it-to-the-ssh-agenthttps://help.github.com/en/articles/adding-a-new-ssh-key-to-your-github-account


10
我用这个命令 ls -al ~/.ssh 检查我是否有现有的ssh密钥。结果显示我已经有一个了。那么,既然我已经有了一个,为什么还需要生成一个新的呢? - Jessie
9
导航至 Github 个人资料 > 设置 > SSH 和 GPG 密钥 > 新的 SSH 密钥。在文本框中粘贴~/.ssh/id_rsa.pub 文件的内容。更多信息请参见答案中的第二个链接。 - Moazzem Hossen
5
我已经拥有一个SSH密钥,并且它是被加密的。因此,我需要先解锁它,方法是在Mac上添加它,例如:ssh-add ~/.ssh/id_rsa,其中id_rsa是你的SSH秘钥。然后输入我的加密密码即可。 - Knogobert
在Ubuntu上运行ssh-add id_rsa后,我收到了错误消息“无法打开到您的身份验证代理的连接”。如果你遇到这个问题,请运行以下命令:1)exec ssh-agent bash 2)ssh-add <your_key>视频 - MattJamison
由于某种奇怪的原因,我突然无法通过ssh访问gh了,按照@Knogobert建议的步骤操作后问题得到解决。真是太奇怪了,因为我肯定已经做过这个操作了。 - Sang Dang

46

我遇到了这个问题,因为我像@Mon一样使用了非标准位置作为我的密钥存储路径。在我的情况下,我没有使用默认的文件名,因为我在系统上有多个密钥,所以简单地移动或重命名是不可能解决它的。

解决方案是编辑或创建~/.ssh/config(OpenSSH文档中的config配置身份验证密钥的位置)包含以下内容:

Host github.com
  HostName github.com
  User git
  IdentityFile ~/.ssh/github-key
  • 不要编辑第三行以反映您自己的用户名。用户名应为git(请参见GitHub文档)。

  • 编辑第4行以反映您密钥的位置。

如果您已经有一个config文件,在操作之前先查看其中内容是值得的。在编辑之前备份一下永远不会有坏处。

以上假设您已经创建了密钥,将其放在了 GitHub 上,并且确实拥有权限,其他所有内容都正常,但仍然遇到错误。


1
在尝试推送失败后,我尝试了许多解决方案,但这个对我有效。同时,我使用Putty Gen将我的密钥转换为新的OpenSSH格式。 - klys
1
请确保在服务器上添加新密钥:$ eval "$(ssh-agent -s)"$ ssh-add path/to/your/key - kontur
2
这就是我需要做的全部,因为我的名字不太常见。 - tekiegirl

24

即使在Github上添加了SSH密钥,我仍然遇到了同样的问题。

通过运行以下命令解决了该问题:

ssh -vT git@github.com


5
非常感谢!它显示了错误日志,并发现 git 在尝试进行身份验证时使用特定路径(~/.ssh)和文件名(id_<type>)。我不应该将其重命名。 - Mon
1
谢谢,这个解决了我今天在Github上的问题。 - Arefe
太棒了!谢谢。我按照以上所有步骤进行了操作,最终这个让我成功了... - DrJMcAuliffe

2

我曾经在设置过程中遇到了很多问题,而且也出现了同样的错误。

解决我的问题的方法是将.git文件夹放在另一个用户下,并使用sudo访问它。我将文件夹权限更改为该用户:

chown -R user:user .git/

1
当我遇到这个问题时,最终发现我的git远程源url中有一个错别字。也许你可以仔细检查一下,确保所有的拼写都正确,没有任何额外的意外按键?

1
我认为从~./ssh文件夹复制公钥内容的最佳方法是使用clip命令。手动选择并复制可能会引入额外的空格等问题。
以下是我会遵循的步骤。
1- 检查是否已经有密钥对

ls -lah ~/.ssh

在CMD中:dir/W %USERPROFILE%\.ssh

2- 如果您有密钥对,请将公钥内容复制到内存中

cat ~/.ssh/id_xxxxx.pub | clip

xxxxx可以是ed25519rsa

在CMD中:type %USERPROFILE%\.ssh\id_rsa.pub | clip

3- 如果您没有密钥对,只需使用以下其中一条命令生成:

(首选第一个)。

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

或者

ssh-keygen -t rsa -b 4096 -C "your_email@example.com

然后执行第2步。
4- 转到github,然后粘贴您使用clip复制的内存内容

注意:相同的步骤也适用于BitBucket、GitLab和Azure repos。

enter image description here


1

在Windows系统中,有时会安装多个SSH版本。这会导致使用git时出现冲突:git@github.com: Permission denied (publickey)。为了解决这个问题,只需将正确的版本指向环境变量即可:

setx /m GIT_SSH C:\Windows\System32\OpenSSH\ssh.exe


1

我遇到了这个问题,因为我有一个针对bitbucket.org的ssh密钥,现在我想要添加一个新的ssh密钥用于github.com。

所以解决方案是:

  • 配置一个新的ssh密钥
  • 为了指定使用哪个密钥连接github.com,在你的SSH配置文件(~/.ssh/config)中更新或创建以下设置:
## My current config
 Host bitbucket.org
 AddKeysToAgent yes
 IdentityFile ~/.ssh/keyOfBitbucket
## End

 Host github.com
 AddKeysToAgent yes   
 IdentityFile ~/.ssh/keyOfGithub

0
我之前使用了git remote set-url origin git@github.com:g33kfleek/"your repository"来设置我的仓库源,然后我通过以下方式进行了修复:
'git remote set-url origin https://github.com/"username"/"your repo"'

然后你运行:
git push -u origin main

感谢您对Stack Overflow社区做出贡献的兴趣。这个问题已经有很多答案了,其中一个答案已经得到社区的广泛验证。您确定您的方法之前没有被提到过吗?如果是这样的话,能否详细解释一下您的方法与之前的方法有何不同,以及在什么情况下您的方法可能更好,或者为什么您认为之前的答案不够满意。您能否编辑您的答案并提供解释? - undefined

0
对我来说问题在于我使用了一台新电脑,尝试访问与我的其他计算机相同的帐户。仅仅创建一个新的SSH是不够的,您还需要在GitHub个人资料中注册它。一旦我这样做了,问题就解决了。

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