891

有人看到此错误并知道该怎么做吗?

我正在使用终端,我在根目录下,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.
4

43 回答 43

798

GitHub 无法对您进行身份验证。所以,要么你没有设置 SSH 密钥,因为你没有在你的机器上设置一个,要么你的密钥没有与你的 GitHub 帐户相关联。

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

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

于 2012-10-17T18:15:18.750 回答
157

我知道这个问题。添加 ssh 密钥后,也将 ssh 密钥添加到 ssh 代理(来自官方文档

ssh-agent -s
ssh-add ~/.ssh/id_rsa

一切正常后,git可以查看正确的密钥,之前不能。

于 2015-06-12T14:51:18.680 回答
116

您是否在 ~/.ssh 目录中创建了配置文件?它应该有如下内容:

Host github.com 
 IdentityFile ~/.ssh/github_rsa

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

并将其上传到 GitHub...

注意:如果您的 ~/.ssh/ 目录中有超过 1 个密钥(2 个或更多),则必须遵循这种显式配置方式。如果你不这样指定密钥,那么按顺序取第一个密钥并用于 github 身份验证,因此它取决于密钥文件名。

于 2014-02-21T15:43:31.940 回答
64

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

于 2012-10-17T18:13:32.383 回答
59

这发生在我身上。由于某种原因,我的起源在我没有意识到的情况下搞砸了:

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

git remote -v

url 需要类似于 ssh://git@github.com/YourDirectory/YourProject.git;如果您没有看到 git@github.com,请使用

git remote set-url origin git://github.com/YourDirectory/YourProject.git

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

于 2013-05-23T03:30:45.620 回答
29

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

git remote set-url origin https_link_to_repository

git push -u origin master
于 2018-11-13T09:12:04.843 回答
28

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

$git config --get remote.origin.url

如果您得到的结果具有以下格式 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"

系统将要求您确认 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 密钥

于 2016-01-03T14:34:40.220 回答
20

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

ls -al ~/.ssh

#or

cd ~/.ssh
ls

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

最后取决于您所看到的(在我的情况下是):

 github_rsa  github_rsa.pub known_hosts

只需尝试设置您的 RSA,希望这将解决您的“git push origin”问题

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

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

于 2013-08-01T23:23:31.470 回答
20

另一个解决方案:

创建 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 

你会得到类似的东西:

cat ~/.ssh/id_rsa.pub 

ssh-rsa AAAB3NzaC1yc2EAAAADAQABAAACAQCvMzmFEUPvaA1AFEBH6zGIF3N6pVE2SJv9V1MHgEwk4C7xovdk7Lr4LDoqEcqxgeJftwWQWWVrWWf7q9qCdHTAanH2Q5vx5nZjLB+B7saksehVOPWDR/MOSpVcr5bwIjf8dc8u5S8h24uBlguGkX+4lFJ+zwhiuwJlhykMvs5py1gD2hy+hvOs1Y17JPWhVVesGV3tlmtbfVolEiv9KShgkk3Hq56fyl+QmPzX1jya4TIC3k55FTzwRWBd+IpblbrGlrIBS6hvpHQpgUs47nSHLEHTn0Xmn6Q== user@email.com

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

于 2017-08-21T10:09:02.317 回答
17

这对我有用:

1-删除所有来源

git remote rm origin  

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

*remote :“管理您跟踪其分支的存储库集(“远程”)。

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

2-检查所有已被删除:

git remote -v  

3-添加新的原点主

git remote add origin git@github.com:YOUR-GIT/YOUR-REPO.git

就是这样!

于 2017-12-20T07:22:07.720 回答
14

我收到了这个错误。原来我刚刚将 OSX 升级到 Sierra,我的旧密钥不再注册。

起初我以为是“升级到 macOS Sierra 会破坏您的 SSH 密钥并将您锁定在自己的服务器之外”

但我回避了那个。原来我只需要重新注册我现有的密钥:

ssh-add -K

然后输入密码……完成!

于 2017-02-10T23:27:57.990 回答
10

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

在存储库的主目录中:

$ ls -a

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

[submodule "XXX"]
    path = XXX
    url = git@github.com:YYY/XXX.git

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

[submodule "XXX"]
    path = XXX
    https://github.com/YYY/XXX.git

保存 ".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

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

    url = https://github.com/YYY/XXX.git

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

于 2016-01-26T15:19:05.723 回答
9

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

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

否则,请按照这些说明生成 SSH 密钥对。

于 2014-06-10T21:07:33.670 回答
9

我想我有最好的答案给你,你的 git 应用程序在根用户目录中读取你的 id_rsa.pub

/home/root/.ssh/id_rsa.pub

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

$ sudo su
$ ssh-keygen
$ cd ~/.ssh
$ cat id_rsa.pub

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

于 2015-12-01T11:16:47.690 回答
8

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

git remote add origin git@github.com:YOUR-GIT/YOUR-REPO.git

我得到了

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 config

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

user.name=<your_username>
user.email=<your_email>

因此,您必须将credential.helper属性添加到您的 git 配置中

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

于 2021-05-29T14:03:41.417 回答
8

我之前在我的一个 php 项目中使用了 github。在使用 github 时,我使用的是 ssh 而不是 https。我的机器是这样设置的,每次我提交和推送代码时,它都会询问我的 rsa 密钥密码。

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

我是怎么解决的?

  1. 运行此命令来告诉我的 git 使用 https 而不是 ssh:

    git config --global url."https://".insteadOf git://
    
  2. 删除任何遥控器(如果有)

    git remote rm origin
    
  3. 重做从git initgit push的所有操作,它就可以工作了!

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

于 2016-01-01T06:23:46.173 回答
5

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

在此处输入图像描述

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

于 2020-06-25T18:49:59.057 回答
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

于 2019-03-26T20:16:59.583 回答
4

如果您已经创建了 SSH 密钥并且仍然收到错误,那是因为您需要授予用户权限来读取和写入您要克隆到的文件夹。为此,sudo chmod 777 <your_folder_name_here>". 当然,这是在您生成 SSH 密钥之后,您仍然会收到此错误。希望这对未来的用户有所帮助。

编辑

如果您使用的是 git bash,请在 Windows 中添加到此使用 admin

于 2016-09-08T19:52:57.883 回答
3

我想补充一些我的发现:

如果您正在使用GitBash,请确保 SSH 密钥存储在~/.ssh/id_rsa.

默认情况下GitBash搜索~/.ssh/id_rsaSSH 密钥的默认路径。

甚至文件名也id_rsa很重要。如果您将 SSH 密钥保存在另一个文件名或路径中,则会引发Permission Denied(publickey)错误。

于 2016-12-24T10:10:04.117 回答
3

我最近有同样的问题。如果您需要立即修复,这可能会有所帮助,但每次重新启动系统时都需要这样做

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

输入您的系统密码,这应该可以工作。

于 2017-02-02T15:28:54.470 回答
2

TLDR:

  1. 确保您可以write访问 repo(从 repo 配置它settings)。
  2. 确保公钥在SSH and GPG keys您的 github 帐户中。

对我来说,当我尝试从新安装的机器克隆一些 repo 时,通常会发生此错误。github 收到请求时,首先会检查公钥哈希。如果公钥不匹配任何用户,github 将拒绝此请求。如果机器是新机器并且您的 ssh 密钥是新生成的,这种情况很常见。

于 2022-01-05T03:16:13.297 回答
2

对我来说,我试过这个 -

eval "$(ssh-agent -s)"

然后我跑

ssh-add ~/.ssh/path-to-the-keyfile

并生成您可以运行的密钥

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

这将生成一对密钥(公共和私人)。

您可以将此密钥存储到 github 以获取更多信息,请阅读将新的 SSH 密钥添加到您的 GitHub 帐户

我希望它会帮助别人:)

于 2016-12-08T10:52:18.990 回答
2

git pull我在远程主机上搜索类似错误消息的解决方案时找到了此页面:

$ git pull
Permission denied (publickey).
fatal: Could not read from remote repository.

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

我通过 . 从本地机器连接到远程主机ssh -AY remote_hostname。这不是 OP 问题的解决方案,但对遇到此页面的其他人很有用,因此在此处发布。

请注意,在我的情况下,git pull在我的本地机器上工作正常(也就是说,已经设置了 ssh 密钥,并添加到 GitHub 帐户等)。~/.ssh/config我通过在我的笔记本电脑上添加这个来解决我的问题:

Host *
     ForwardAgent yes

然后我用 重新连接到远程主机ssh -AY remote_hostnamegit pull现在可以工作了。配置中的更改可以将我的 ssh 密钥对从本地机器转发到任何主机。在该 ssh 会话中实际转发它的-A选项。在此处查看更多详细信息。ssh

于 2018-08-10T19:15:19.480 回答
2

在此处输入图像描述如果您使用的是 Widows-10,请按照此说明进行操作。这个对我有用。

  1. 以管理员身份打开终端

  2. 运行这个命令:“ssh-keygen”。它会生成一个 ssh 密钥,并将显示创建它的文件夹。检查我的图像在此处输入图像描述

  3. 复制生成的“ssh key”

  4. 转到您的 github 配置文件 ---> 设置 --> 单击 SSH 和 GPH --> 单击““新建 SSH 密钥按钮”并粘贴“ssh 密钥”,最后“单击添加按钮”

于 2021-12-15T11:01:12.373 回答
2

同样在 ubuntu 中,即使在 BitBucket 的设置中已经输入了 SSH 密钥,我也遇到了这个问题。原因是,我正在尝试以下操作:

sudo git push origin master

不知道为什么,但它通过使用解决了

git push origin master

没有使用 sudo。

于 2016-02-28T10:25:44.543 回答
1

如果您使用的是 GitHub for Mac UI,请检查首选项以确保您已登录。

于 2015-02-17T06:19:19.793 回答
1

在“git push”期间我遇到了同样的错误。在客户端,我有两个起源和主人。我删除了一个,然后它工作正常。

于 2015-05-28T16:37:35.923 回答
1

tl;博士

~/.ssh/config总而言之_

PubkeyAcceptedKeyTypes=+ssh-dss

场景 如果您使用的是 openSSH > 7 的版本,例如在触控栏 MacBook Pro 上,它是ssh -V
OpenSSH_7.4p1, LibreSSL 2.5.0

您还拥有一台旧 Mac,它最初将您的密钥放在 Github 上,这可能是使用 id_dsa 密钥。默认情况下,OpenSSH v7 不使用这些 DSA 密钥(包括 this ssh-dss),但是您仍然可以通过将以下代码放入您的~/.ssh/config

PubkeyAcceptedKeyTypes=+ssh-dss

对我有用的来源是这个Gentoo 时事通讯

现在您至少可以使用 GitHub,然后将您的密钥修复为 RSA。

于 2017-11-02T09:48:35.313 回答
1

您可以使用 Https url 登录

我猜您在说 git push 时尝试使用 ssh url 登录,如果它只询问密码,则认为您是通过 ssh 连接的。最好使用 http url。

于 2015-07-30T03:24:32.243 回答
1

我遇到了与@Batman 类似的问题。但是,因为我在 /usr/local/src/projectname 下运行它,所以不使用 sudo 运行不是一个选项。

只需添加-E 标志来保存环境(您的 ~/.ssh/ 路径)。

$ sudo -E git clone git@your_repo

从人须藤:

-E, --preserve-env 向安全策略指示用户希望保留他们现有的环境变量。如果用户没有保护环境的权限,安全策略可能会返回错误。

于 2017-02-24T01:28:29.400 回答
1

发生这种情况的一种情况是在创建存储库后按照 GitHub 说明进行操作。Git 将指示您使用类似的东西添加您的遥控器。

git remote add origin git@github.com:<user>/<project>.git

将 <> 中的内容替换为与您的帐户相关的值。

解决办法是去掉.git后缀。添加遥控器如下:

git remote add origin git@github.com:<user>/<project>

于 2017-05-10T01:07:25.363 回答
1

解决这样的错误

git@github.com:权限被拒绝(公钥)。致命:无法从远程存储库中读取。请确保您拥有正确的访问权限

解决方案 (OSX)

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

  • $光盘~

  • $须藤苏

  • $ ssh-keygen

    • 输入保存密钥的文件 (/var/root/.ssh/id_rsa): $ id_rsa
    • Enter passphrase (empty for no passphrase): $ hit enter
    • 再次输入相同的密码:$回车
  • $ cd ~/.ssh

  • $猫id_rsa.pub

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

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

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

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

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

于 2021-11-19T21:44:51.773 回答
1

这对我有用

2 optionsgithub上有——HTTPS/SSH

I had selected SSH错误导致错误发生-_-

将其切换到 HTTPS,然后再次复制 url 并尝试 :)

于 2020-12-26T05:46:51.997 回答
0

也许你的 ssh-agent 没有启用你可以试试

  1. 下载 git

http://git-scm.com/

  1. 安装它

  2. 启用 ssh 代理

C:\Program Files\Git\cmd

启动 ssh 代理

于 2014-07-11T11:30:48.813 回答
0

转到您的 GitHub 帐户仪表板,找到您的项目存储库,单击设置选项卡 - 在部署密钥下,您必须添加您的 SSH 密钥。打开终端并输入:

cat ~/.ssh/id_rsa.pub | pbcopy 

这将从您的 id_rsa.pub 文件中复制密钥。所以只需返回 GitHub 仪表板,粘贴它,单击Add Key就可以了。

相同的解决方案适用于 Bitbucket 帐户。

于 2017-02-07T16:21:50.543 回答
0

我在 ssh 代理中加​​载了 2 个 Github 身份文件。我的个人密钥和另一个用于客户项目的密钥。

我删除了导致混乱的密钥:

ssh-add -d id_rsa_github_somekey

于 2017-04-22T17:32:31.340 回答
0

我试图用几个小时来解决类似的问题。最后,我删除了所有密钥并制作了没有密码的新密钥,最终解决了这个问题。

问题出在 SSH 密码短语上,需要删除!

于 2021-09-17T13:26:54.283 回答
0

我有同样的问题,但没有一个答案有效,但一个简单的解决方案有效。但请注意,我确实ssh key按照答案的建议添加了。不确定这是否真的有帮助。无论如何,这最终奏效了:

使用 git remote set-url 命令将远程的 URL 从 HTTPS 更改为 SSH。$ git remote set-url origin git@github.com:USERNAME/REPOSITORY.git. 验证远程 URL 是否已更改。

于 2021-04-08T16:26:32.737 回答
0

使用 Https 很好,运行git config --global credential.helper wincred创建一个 Github 凭证助手,为您存储您的凭证。如果这不起作用,那么您需要编辑目录config中的文件.git并将源更新为 https url。

有关 github 文档,请参阅此链接

于 2018-03-15T22:30:52.607 回答
0

我对 AWS CodeCommit 也有同样的问题。所有人都在一台笔记本电脑上工作,但在另一台笔记本电脑上却不行。解决方案是从 AWS 配置部分的 .ssh/config 中删除“PreferredAuthentications publickey”行。

于 2019-11-20T19:58:29.627 回答
0

将 GitHub 添加为远程时使用此页面的 URL。它不会导致任何此类错误并推送代码

于 2018-02-22T11:30:47.607 回答
-1

你可以试试这个方法...

在此处输入图像描述

在此处输入图像描述

选择另一个链接

于 2016-11-03T13:40:38.480 回答