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

时间:2012-10-17 18:11:56

标签: 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.

39 个答案:

答案 0 :(得分:624)

GitHub无法验证您的身份。因此,要么您没有使用SSH密钥设置,要么没有set one up on your machine,或者您的密钥与您的GitHub帐户无关。

您还可以使用HTTPS URL而不是SSH / git URL来避免必须处理SSH密钥。这是GitHub's recommended method

此外,GitHub有一个help page specifically for that error message,并详细解释了您可以查看的所有内容。

答案 1 :(得分:65)

您是否在〜/ .ssh目录中创建了 config 文件?它应该包含以下内容:

Host github.com 
 IdentityFile ~/.ssh/github_rsa

假设您创建了一个名为 github_rsa

并将其上传到GitHub ......

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

答案 2 :(得分:57)

您需要生成SSH密钥(如果您没有),并将公钥与您的Github帐户相关联。请参阅Github's own documentation

答案 3 :(得分:55)

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

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

在它之后,一切正常,git可以查看正确的密钥,然后才开始。

答案 4 :(得分:49)

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

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

git remote -v

网址必须类似于ssh://git@github.com/YourDirectory/YourProject.git; 如果你没有看到git@github.com,请使用

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

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

答案 5 :(得分:19)

首先,我们需要检查您计算机上的现有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以某种方式搞砸了,我不得不“链接”以前生成的公钥)

答案 6 :(得分:18)

假设您通过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

转到设置 - &gt; SSH密钥(个人设置侧栏) - &gt; 添加SSH密钥 - &gt;填写表单(键位于剪贴板上,只需使用ctrl + v) - &gt; 添加键

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

参考链接: Generating SSH keys

答案 7 :(得分:14)

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

起初我以为是"Upgrading to macOS Sierra will break your SSH keys and lock you out of your own servers"

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

ssh-add -K

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

答案 8 :(得分:8)

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

如果输出为空,但您知道有一个适用于您的github帐户的私有SSH密钥,请在此密钥上运行ssh-add(在~/.ssh中找到。它的名称为{ {1}}默认情况下,您可能会运行id_rsa)。

否则,请按these instructions生成SSH密钥对。

答案 9 :(得分:8)

如果您没有访问自己的存储库,或克隆在克隆的存储库中(使用一些“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”,转到“配置”文件,您会发现如下内容:

[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。

答案 10 :(得分:7)

这对我有用:

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

这就是所有人!

答案 11 :(得分:7)

另一种解决方案:

创建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密钥)下添加您的公钥。

答案 12 :(得分:6)

我之前使用github作为我的一个php项目。使用github时,我使用的是ssh而不是https。我有machine set up这样的,每次我提交并推送代码时,它都会问我我的密码。

几天后,我停止了php项目的工作并忘记了我的rsa密码​​。最近,我开始研究一个java项目并转移到bitbucket。因为,我忘记了密码并且no way to recover it我想,我决定对新项目使用https(推荐)协议,并在问题中提出相同的错误。

我是如何解决的?

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

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

    git remote rm origin
    
  3. 重做从 git init git push 的所有内容,它确实有效!

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

答案 13 :(得分:5)

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

/home/root/.ssh/id_rsa.pub

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

中创建密钥
$ sudo su
$ ssh-keygen
$ cd ~/.ssh
$ cat id_rsa.pub

然后在您的github帐户中复制密钥。 它对我有用。你可以尝试一下。

答案 14 :(得分:4)

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

git remote set-url origin https_link_to_repository

git push -u origin master

答案 15 :(得分:4)

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

修改

如果您正在使用git bash

,请在Windows中使用admin

答案 16 :(得分:3)

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

在终端上,运行:ssh-add ~/.ssh/id_rsa

输入您的系统密码,该密码应该有效。

答案 17 :(得分:3)

我想补充一些我的发现:

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

默认情况下GitBash搜索~/.ssh/id_rsa作为SSH密钥的默认路径。

即使文件名id_rsa也很重要。如果将SSH密钥保存在另一个文件名或路径中,则会抛出Permission Denied(publickey)错误。

答案 18 :(得分:2)

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

8

我得到了

<块引用>

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

但是我通过以下方法解决了我的问题

  1. git remote add origin git@github.com:YOUR-GIT/YOUR-REPO.git 删除您的 git 远程存储库
  2. git remote rm origin 现在检查您的远程远程存储库是否已被删除
<块引用>

网址 = git remote

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

为了防止每次推送都提供用户名和密码你必须改变git config

<块引用>

要列出您的 git 配置 - git push -u origin master
你会看见

git config --global --list

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

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

答案 19 :(得分:1)

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

答案 20 :(得分:1)

这对我有用

github 中有 2 options - HTTPS/SSH

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

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

答案 21 :(得分:1)

好的,对此解决方案很少,可能已经提到其中一些,但只是为了使它们保持一致:

  • 确保您的密钥存在,默认情况下为另一个〜/ .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

答案 22 :(得分:1)

<强> TL;博士

~/.ssh/config put

PubkeyAcceptedKeyTypes=+ssh-dss

<强>方案 如果您使用的是openSSH版本&gt; 7,就像在触摸栏MacBook Pro上说的那样ssh -V
OpenSSH_7.4p1, LibreSSL 2.5.0

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

PubkeyAcceptedKeyTypes=+ssh-dss

对我有用的来源是Gentoo newsletter

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

答案 23 :(得分:1)

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

答案 24 :(得分:1)

一旦出现这种情况,就会在创建存储库后按照GitHub说明进行操作。 Git会指示您添加这样的遥控器。

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

替换&lt;&gt;中的内容与您的帐户相关的值。

解决方案是删除.git后缀。按如下方式添加遥控器:

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

答案 25 :(得分:1)

我和@Batman有类似的问题。但是,因为我在/ usr / local / src / projectname下运行它,所以不使用sudo运行。

只需添加 -E flag 即可预先设置环境(〜/ .ssh / path)。

$ sudo -E git clone git@your_repo

来自man sudo:

  

-E, - pre-env                    表示用户希望预先安全的策略                    服务他们现有的环境变量。安全                    如果用户没有permis-,策略可能会返回错误                    保护环境。

答案 26 :(得分:1)

您可以使用Https网址登录

我猜您正尝试使用ssh网址登录 当你说git push如果它只询问密码时你会想通过ssh.better连接你使用http url。

答案 27 :(得分:1)

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

sudo git push origin master

不确定原因,但是使用

解决了
git push origin master

没有使用sudo。

答案 28 :(得分:0)

我在ssh代理中加载了2个Github标识文件。我的个人密钥和另一个客户项目。

我删除了造成混淆的密钥:

ssh-add -d id_rsa_github_somekey

答案 29 :(得分:0)

对我来说,我试过这个 -

eval "$(ssh-agent -s)"

然后我跑

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

并且用于生成密钥,您可以运行

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

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

您可以将此密钥存储到github,以便更多地阅读此Adding a new SSH key to your GitHub account

我希望它能帮助别人:)

答案 30 :(得分:0)

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

答案 31 :(得分:0)

使用Https很好,运行git config --global credential.helper wincred创建一个Github凭据帮助程序,为您存储凭据。如果这不起作用,则需要编辑config目录中的.git文件,并将原点更新为https网址。

有关github文档,请参阅this link

答案 32 :(得分:0)

我是在远程主机上使用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_hostname重新连接到远程主机,并且git pull现在可以工作了。配置中的更改使我可以将ssh密钥对从本地计算机转发到任何主机。 -A的{​​{1}}选项实际上是在该ssh会话中转发它的。 See more details here.

答案 33 :(得分:0)

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

  1. 下载git
  2. http://git-scm.com/

    1. 安装

    2. 启用ssh-agent

    3. C:\ Program Files \ Git \ cmd

      启动SSH-剂

答案 34 :(得分:0)

转到您的GitHub帐户信息中心,找到您的项目存储库,点击设置标签 - 在部署密钥下,您必须添加SSH密钥。打开终端并输入:

cat ~/.ssh/id_rsa.pub | pbcopy 

这将从您的id_rsa.pub文件中复制密钥。所以,回到GitHub仪表板,粘贴它,点击添加密钥就可以了。

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

答案 35 :(得分:0)

我在AWS CodeCommit中遇到了相同的问题。所有人都在一台笔记本电脑上工作,但不在另一台笔记本电脑上。解决方案是从具有AWS config的部分中的.ssh / config中删除'PreferredAuthentications publickey'行。

答案 36 :(得分:0)

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

enter image description here

如果在Windows上查看更多详细信息,in here

答案 37 :(得分:0)

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

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

答案 38 :(得分:-1)

你可以这样试试......

enter image description here

enter image description here

选择其他链接