GitHub错误消息 - 权限被拒绝(publickey)

web*_*rks 684 git github

有人看到这个错误,知道该怎么办?

我正在使用终端,我在根目录,GitHub存储库存在,我现在不知道该怎么做.

> git push -u origin master
Permission denied (publickey).
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.
Run Code Online (Sandbox Code Playgroud)

bdu*_*kes 641

GitHub无法验证您的身份.因此,要么您没有设置SSH密钥,因为您没有在您的计算机上设置一个,或者您的密钥与您的GitHub帐户没有关联.

您还可以使用HTTPS URL而不是SSH/git URL来避免必须处理SSH密钥.这是GitHub推荐的方法.

此外,GitHub有一个专门针对该错误消息帮助页面,并更详细地解释了您可以检查的所有内容.

  • 此错误不是GitHub独有的.我在BitBucket上遇到了同样的错误,我正在摸索如何解决它...... (53认同)
  • 帮助部分是从[Github帮助页面](https://help.github.com/articles/error-permission-denied-publickey/)使用`ssh -vT git @ github.com`来帮助调试你的密钥回购正在使用.我建议你在答案中添加它. (29认同)
  • 使用HTTPS而不是SSL的upvote有点令人失望.SSH更方便.来自@MaximeBernard的建议为我解决了这个问题:GIT并没有为.ssh目录寻找正确的位置.使用`ssh -vT git @ github.com`提供了很多关于它无法正常工作的信息. (23认同)
  • 在我的例子中,`ssh-add`帮助我解决了这个错误. (17认同)
  • 根据我上面的评论,第三个选项是命令是从具有 ssh 密钥的帐户以外的帐户发送的(例如,以 root 身份运行)。 (3认同)
  • 正如 @theapache64 提到的:如果您使用的是 Mac 并且已经生成了 ssh 密钥“ssh-add”可能确实是您所缺少的。为我工作。 (2认同)

Igo*_*sky 70

你在〜/ .ssh目录中创建了一个配置文件吗?它应该有这样的内容:

Host github.com 
 IdentityFile ~/.ssh/github_rsa
Run Code Online (Sandbox Code Playgroud)

假设您创建了一个名为github_rsa的ssh密钥

并将其上传到GitHub ...

注意:如果〜/ .ssh /目录中有多个键(2个或更多),则必须遵循这种显式配置方式.如果您没有以这种方式指定密钥,则按顺序使用第一个密钥并将其用于github身份验证,因此它取决于密钥文件名.

  • 这确实解决了我的问题!非常感谢!但我有一个问题.在使用你的方法之前,`ssh -T git @ github.com`会正确响应,而`git push -u origin master`会给出与问题相同的错误.为什么我可以正确连接但无法推送或从中获取? (3认同)
  • 我发现的关于该主题的每个教程和注释都假设 id_rsa 和 id_rsa.pub 就像它是第一个也是唯一的 SSH 密钥。这次真是万分感谢。 (3认同)
  • 我已经生成了 ssh 密钥并且能够正常工作一段时间,没有出现任何问题。一个晴朗的一天(可能是在重新启动后),它停止工作,而 github 和我的本地系统上的密钥完好无损。我添加了“配置文件”,指定了映射到域的键。上面 igor-ganapolsky-answer 中提供了详细信息。效果很好! (2认同)

cdh*_*wie 60

您需要生成SSH密钥(如果没有),并将公钥与您的Github帐户关联.请参阅Github自己的文档.

  • 谢谢你...我现在从 GitHub 得到了一个 SSH 密钥。现在在终端用什么命令将两者关联起来?谢谢! (2认同)
  • 没有终端命令.请参阅我在答案中链接的文档中的步骤4. (2认同)

Vel*_*uha 58

我知道这个问题.添加ssh密钥后,也将ssh密钥添加到ssh代理(来自官方文档https://help.github.com/articles/generating-ssh-keys/)

ssh-agent -s
ssh-add ~/.ssh/id_rsa
Run Code Online (Sandbox Code Playgroud)

在它之后,所有工作都很好,git可以查看正确的密钥,之前没有.

  • 无法打开与身份验证代理的连接. (8认同)
  • 太守!在我的MacOS X上工作. (5认同)
  • 尝试运行此命令: eval `ssh-agent -s` (2认同)

小智 50

这发生在我身上.出于某种原因,我的起源搞得一团糟而没有意识到:

检查您的设置是否仍然正确

git remote -v
Run Code Online (Sandbox Code Playgroud)

网址需要像ssh://git@github.com/YourDirectory/YourProject.git; 如果你没有看到git@github.com,请使用

git remote set-url origin git://github.com/YourDirectory/YourProject.git
Run Code Online (Sandbox Code Playgroud)

设置正确.或者,您可以使用github应用程序检查并在特定存储库的设置面板中设置主远程存储库URL.

  • 小心网址.它们在https和ssh之间有所不同,而且此页面上的帖子并不清楚.每个git项目在项目根目录中都有一个.git/config文件.在那里,您可以设置远程和分支信息.为https设置遥控器:url = https://github.com/<yourGitUserName>/<yourGitProject>.git对于git + ssh:url = git@github.com:<yourGitUserName>/<yourGitProject> .git拥有错误的网址导致公钥权限被拒绝错误,这可能不是一个非常明确的错误. (9认同)

d1j*_*i1b 19

首先,我们需要检查您计算机上的现有ssh密钥.打开终端并运行:

ls -al ~/.ssh

#or

cd ~/.ssh
ls
Run Code Online (Sandbox Code Playgroud)

这将列出.ssh目录中的文件

最后取决于你所看到的(在我的例子中):

 github_rsa  github_rsa.pub known_hosts
Run Code Online (Sandbox Code Playgroud)

只是尝试设置你的RSA,希望这将解决你的"git推动起源"问题

$ ssh-keygen -lf ~/.ssh/github_rsa.pub

注意: RSA证书是密钥配对的,因此您将拥有私有和公共证书,私有将无法访问,因为它属于github(在这种情况下)但公共是您可能在此错误发生时丢失的那个(至少那是我的情况,我的github帐户或repo以某种方式搞砸了,我不得不"链接"以前生成的公钥)


xin*_*erd 19

假设您通过SSH连接GitHub,您可以运行以下命令来确认这一点.

$git config --get remote.origin.url
Run Code Online (Sandbox Code Playgroud)

如果您得到的结果格式如下:git@github.com:xxx/xxx.github.com.git,那么您应该执行以下操作.

生成SSH密钥(或使用现有密钥).如果你有一个,你只需要将你的密钥添加到ssh-agent(第2步)和你的GitHub帐户(第3步).

以下是那些没有SSH密钥的人.

步骤1生成公钥/私钥rsa密钥对.

$ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
Run Code Online (Sandbox Code Playgroud)

系统会要求您确认保存SSH密钥的位置以及要使用的密码短语.

步骤2将密钥添加到ssh-agent

  • 确保已启用ssh-agent

    $eval "$(ssh-agent -s)"

  • 将SSH密钥添加到ssh-agent:

    $ssh-add ~/.ssh/id_rsa

步骤3将SSH密钥添加到您的帐户

$sudo apt-get install xclip

$xclip -sel clip < ~/.ssh/id_rsa.pub

然后将复制的密钥添加到GitHub

转到设置 - > SSH密钥(个人设置侧栏) - > 添加SSH密钥 - >填写表格(密钥在剪贴板上,只需使用ctrl + v) - > 添加密钥

完成上述步骤后,您应该解决权限问题.

参考链接: 生成SSH密钥.


Abh*_*mar 17

如果您在连接企业 Github 帐户时遇到问题,请按照以下步骤操作

解决方案#1

ERROR: git@github.com: Permission denied (public key). fatal: Could not read
from remote repository. Please make sure you have the correct access
rights
Run Code Online (Sandbox Code Playgroud)

解决方案(OSX)

  • 打开您的终端并按照以下命令操作

  • $ CD ~

  • $须藤苏

  • $ ssh 密钥生成器

    • 输入保存密钥的文件 (/var/root/.ssh/id_rsa): $ id_rsa
    • 输入密码(没有密码则为空):$按回车键
    • 再次输入相同的密码:$按回车键
  • $ cd ~/.ssh

  • $猫 id_rsa.pub

  • 复制显示内容。 在此输入图像描述

  • 打开 GitHub 单击您的个人资料图标设置>SSH 和 GPC 密钥

  • 单击新的 ssh 密钥按钮 在此输入图像描述

  • 输入您复制的任何标题和密钥 在此输入图像描述

  • 现在检查您的问题是否已解决

解决方案#2

ERROR 2: remote: Password authentication is not available for Git operations.
remote: You must use a personal access token or SSH key.
remote: See https://github.compnay.com/settings/tokens or https://github.compnay.com/settings/ssh
fatal: unable to access 'https://github.company.com/repo/app.git/': The requested URL returned an error: 403
Run Code Online (Sandbox Code Playgroud)

2021 年 8 月 13 日删除了对密码身份验证的支持。请改用个人访问令牌。

https://namespaceit.com/blog/remote-support-for-password-authentication-was-removed-on-august-13-2021-please-use-a-personal-access-token-instead


jfu*_*unk 14

我收到了这个错误.结果我刚刚将OSX升级到Sierra,我的旧密钥已不再注册.

起初我以为是"升级到macOS Sierra会破坏你的SSH密钥并锁定你自己的服务器"

但是我回避了那一个.结果我只需要重新注册我现有的密钥:

ssh-add -K

然后输入密码......完成!

  • 同样的问题,对我有用:`ssh-add -K~/.ssh/id_rsa` (2认同)

Dam*_*ika 12

是的,我也有这个问题:/我打算以 HTTP 类型(而不是 SSH 类型)将我的项目推送到 Github。我必须在每次推送中输入我的用户名和密码。所以首先我输入了与以下类型相关的代码

git remote add origin git@github.com:YOUR-GIT/YOUR-REPO.git
Run Code Online (Sandbox Code Playgroud)

我得到了

git@github.com:权限被拒绝(公钥)。致命:无法从远程存储库读取。

所以我通过执行以下方法解决了我的问题

  1. git remote rm origin 删除您的 git 远程存储库
  2. git remote 现在检查您的远程远程存储库是否已被删除

网址 =https://github.com/<username>/<repository>.git

  1. git remote add origin URL 再次添加您的 URL 以创建远程存储库
  2. git push -u origin master
    您可以将内容推送到远程存储库。在这里,当您在命令中使用“-u”时,您将创建一个跟踪分支,并在远程存储库中的跟踪分支的帮助下,您不会告诉 git 您在接下来的步骤中推送哪个分支:)
    在这里,如果您使用linux git 在推送内容之前会询问用户名和密码。并提供您的相关凭据。

为了防止在每次推送中提供用户名和密码,你必须更改 git 配置

列出你的 git 配置 -git config --global --list
你会看到

user.name=<your_username>
user.email=<your_email>
Run Code Online (Sandbox Code Playgroud)

所以你必须将credential.helper属性添加到你的 git 配置中

5.git config --global --add credential.helper store将其添加到您的终端现在您可以将新项目添加到您的文件中git add.,然后git commit -m "<message>",, git push
现在 git 也会请求您的用户名和密码,这将是最后一次。对于下一次 git 推送,git 不会向您请求用户名和密码:)


N. *_*sil 10

如果您没有访问自己的存储库,或克隆在克隆的存储库中(使用一些"git submodule ..."命令):

在存储库的主目录中:

$ ls -a
Run Code Online (Sandbox Code Playgroud)

1.打开".gitmodules",你会发现这样的东西:

[submodule "XXX"]
    path = XXX
    url = git@github.com:YYY/XXX.git
Run Code Online (Sandbox Code Playgroud)

将最后一行更改为您需要提取的存储库的HTTPS:

[submodule "XXX"]
    path = XXX
    https://github.com/YYY/XXX.git
Run Code Online (Sandbox Code Playgroud)

保存".gitmodules",并运行子模块的命令,".git"将被更新.

2.打开".git",转到"config"文件,你会发现这样的事情:

[core]
    repositoryformatversion = 0
    filemode = true
    bare = false
    logallrefupdates = true
    ignorecase = true
    precomposeunicode = true
[remote "origin"]
    url = https://github.com/YYY/XXX.git
    fetch = +refs/heads/*:refs/remotes/origin/*
[branch "master"]
    remote = origin
    merge = refs/heads/master
[submodule "XXX"]
    url = git@github.com:YYY/XXX.git
Run Code Online (Sandbox Code Playgroud)

将最后一行更改为您需要提取的存储库的HTTPS:

    url = https://github.com/YYY/XXX.git
Run Code Online (Sandbox Code Playgroud)

因此,在这种情况下,主要问题仅在于url.现在可以在存储库页面的顶部找到任何存储库的HTTPS.


Bad*_*laj 10

另一种方案:

创建SSH密钥,键入ssh-keygen -t rsa -C "your_email@example.com".这将创建id_rsa和id_rsa.pub文件.

将id_rsa添加到本地计算机上的ssh列表: ssh-add ~/.ssh/id_rsa.

生成密钥后,使用以下方法获取pubkey:

cat ~/.ssh/id_rsa.pub 
Run Code Online (Sandbox Code Playgroud)

你会得到类似的东西:

cat ~/.ssh/id_rsa.pub 

ssh-rsa AAAB3NzaC1yc2EAAAADAQABAAACAQCvMzmFEUPvaA1AFEBH6zGIF3N6pVE2SJv9V1MHgEwk4C7xovdk7Lr4LDoqEcqxgeJftwWQWWVrWWf7q9qCdHTAanH2Q5vx5nZjLB+B7saksehVOPWDR/MOSpVcr5bwIjf8dc8u5S8h24uBlguGkX+4lFJ+zwhiuwJlhykMvs5py1gD2hy+hvOs1Y17JPWhVVesGV3tlmtbfVolEiv9KShgkk3Hq56fyl+QmPzX1jya4TIC3k55FTzwRWBd+IpblbrGlrIBS6hvpHQpgUs47nSHLEHTn0Xmn6Q== user@email.com
Run Code Online (Sandbox Code Playgroud)

复制此密钥(值)并转到github.com并在设置(ssh和pgp密钥)下添加您的公钥.


mar*_*han 9

这对我有用:

1-删除所有来源

git remote rm origin  
Run Code Online (Sandbox Code Playgroud)

(参见https://www.kernel.org/pub/software/scm/git/docs/git-remote.html)

*remote:"管理您跟踪其分支的存储库集("遥控器").

*rm:"删除名为的遥控器.远程的所有远程跟踪分支和配置设置都将被删除."

2-检查所有已被删除:

git remote -v  
Run Code Online (Sandbox Code Playgroud)

3-添加新的原始主人

git remote add origin git@github.com:YOUR-GIT/YOUR-REPO.git
Run Code Online (Sandbox Code Playgroud)

这是所有人!


Ros*_*one 8

确保ssh-add -l显示您的Github帐户中SSH密钥列表中存在的SSH密钥的指纹.

如果输出为空,但您知道您有一个与您的github帐户一起使用的私有SSH密钥,请运行ssh-add此密钥(找到~/.ssh它.id_rsa默认情况下命名,因此您可能会运行ssh-add id_rsa).

否则,请按照以下说明生成SSH密钥对.


3AK*_*3AK 7

我之前使用github作为我的一个php项目.使用github时,我使用的是ssh而不是https.我有我的机器设置,每次我提交和推送代码,它会问我我的密码.

几天后,我停止了php项目的工作并忘记了我的rsa密码​​.最近,我开始研究一个java项目并转移到bitbucket.因为,我忘记了密码并且没有办法恢复它我想,我决定使用https(推荐)协议用于新项目并在问题中得到相同的错误.

我怎么解决了?

  1. 跑这个命令告诉我的git使用https而不是ssh:

    git config --global url."https://".insteadOf git://
    
    Run Code Online (Sandbox Code Playgroud)
  2. 删除任何遥控器

    git remote rm origin
    
    Run Code Online (Sandbox Code Playgroud)
  3. 重做从git initgit push的一切,它的工作原理!

PS:我也在调试过程中从我的机器上卸载了ssh,认为删除它会解决问题.是的我知道!!:)


geo*_*ano 6

如果将ssh访问权限更改为对远程存储库的https访问权限,则问题已解决:

git remote set-url origin https_link_to_repository

git push -u origin master
Run Code Online (Sandbox Code Playgroud)


rom*_*man 5

我认为我对您来说是最好的答案,您的git应用程序会在根用户目录中读取id_rsa.pub

/home/root/.ssh/id_rsa.pub
Run Code Online (Sandbox Code Playgroud)

这就是为什么git无法读取您在/home/your_username/.ssh/id_rsa.pub中的密钥的原因。因此,您需要在/home/root/.ssh/中创建密钥

$ sudo su
$ ssh-keygen
$ cd ~/.ssh
$ cat id_rsa.pub
Run Code Online (Sandbox Code Playgroud)

然后将密钥复制到您的github帐户中。对我有用。你可以试试。

  • 这让我找到了我一直在寻找的答案。我出于习惯使用 sudo 运行克隆,因此它正在寻找错误的凭据。去掉 sudo,我的克隆运行得很好。 (2认同)

小智 5

我最近也遇到了同样的问题。如果您需要立即修复,这可能会有所帮助,但是每次重新启动系统时都需要执行此操作

从终端运行:ssh-add ~/.ssh/id_rsa

输入您的系统密码即可。


小智 5

好的,这个解决方案很少,其中一些可能已经被提及,但只是为了将它们放在一起:

  • 确保您的密钥存在,默认情况下另一个 ~/.ssh/ 文件夹,即 id.rsa 和 id.rsa.pub

  • 确保密钥具有正确的权限,您可以运行 chmod:

    chmod 600 ~/.ssh/id_rsa

    chmod 644 ~/.ssh/id_rsa.pub

  • 确保您的公钥(id_rsa.pub)的内容与远程存储库配置中上传的内容相匹配

  • 最后解决ssh代理的问题: ssh-add

更多信息:https : //itcodehub.blogspot.com/2015/01/ssh-add-problems-with-ssh-agent-and.html


pro*_*sti 5

允许对密钥(身份)进行写访问,然后单击Add key

在此输入图像描述

如果在 Windows 上,请查看通过 SSH 使用 Github来了解更多详细信息。