GitHub错误信息 – 权限被拒绝(公钥)

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

我使用的terminal,我在根,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. 

GitHub无法validation您的身份。 所以,要么你没有设置SSH密钥,因为你没有在你的机器上设置一个 ,或者你的密钥没有与你的GitHub帐户关联。

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

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

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

你在〜/ .ssh目录下创build了一个configuration文件吗? 它应该有这样的内容:

 Host github.com IdentityFile ~/.ssh/github_rsa 

假设你创build了一个名为github_rsa的ssh密钥

并上传到GitHub …

注意:如果您的〜/ .ssh /目录中有超过1个键(2个或更多),则必须遵循这种显式configuration方式。 如果你没有这样指定密钥,那么第一个密钥就被用于githubauthentication,所以它依赖于密钥文件名。

这发生在我身上。 出于某种原因,我的起源在我没有意识到的情况下变得混乱起来:

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

 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。

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

 ls -al ~/.ssh #or cd ~/.ssh ls 

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

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

  github_rsa github_rsa.pub known_hosts 

试着build立你的RSA,希望能解决你的“git push origin”问题

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

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

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

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

之后,一切正常,git可以查看正确的密钥,在coudn't之前。

假设你通过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密钥 。

我得到这个错误。 原来我刚把OSX升级到Sierra,旧密钥不再注册。

起初我以为是“升级到macOS Sierra将破坏你的SSH密钥,并locking你自己的服务器”

但我已经回避了那一个。 原来我只是重新注册我现有的密钥:

ssh-add -K

然后input密码…完成!

如果你没有访问自己的仓库,或克隆在克隆库(使用一些“git子模块…”命令):

在您的存储库的主目录中:

 $ 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”将被更新。

打开“.git”,进入“configuration”文件,你会发现这样的东西:

 [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现在都可以在存储库页面上find。

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

如果输出是空的,但是你知道你有一个和你的github帐户一起工作的私有SSH密钥,那么在这个密钥上运行ssh-add (在~/.sshfind),默认情况下它的名字是id_rsa ,所以你可能会运行ssh-add id_rsa )。

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

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

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

我如何解决它?

  1. 冉这个命令告诉我的混帐使用https而不是ssh:

     git config --global url."https://".insteadOf git:// 
  2. 删除任何遥控器

     git remote rm origin 
  3. 重做从git initgit push的一切,它的工作原理!

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

另一个scheme

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

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

生成密钥后,使用以下公钥:

 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键)添加您的公钥。

您可以使用Httpsurllogin

我想你试图用ssh urllogin,当你说git push的时候,如果只是要求input密码,考虑你通过ssh.better来连接你使用的http url。

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

 /home/root/.ssh/id_rsa.pub 

这就是为什么git不能读取/home/your_username/.ssh/id_rsa.pub中的密钥。 所以你需要在/home/root/.ssh/中创build密钥

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

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

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

从terminal运行: ssh-add ~/.ssh/id_rsa

input你的系统密码,这应该工作。

我想补充一些我的发现:

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

默认情况下, GitBashsearch~/.ssh/id_rsa作为SSH密钥的默认path。

即使文件名id_rsa重要。 如果将SSH密钥保存在另一个文件名或path中,则会引发Permission Denied(publickey)错误。

如果您使用Mac UI的GitHub,请检查首选项以确保您已经login。

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

同样在Ubuntu中,即使已经在BitBucket的设置中input了SSH密钥,我也遇到了这个问题。 原因是,我正在尝试以下几点:

 sudo git push origin master 

不知道为什么,但通过使用得到解决

 git push origin master 

没有使用sudo。

如果您已经创build了一个SSH密钥,但仍然收到错误,这是因为您需要授予用户读取和写入您要克隆的文件夹的权限。 要做到这一点, sudo chmod 777 <your_folder_name_here>" 。当然,这是你生成一个SSH密钥后,你仍然得到这个错误。希望这有助于未来的用户。

编辑

要添加到这个使用Windows中的pipe理员,如果你使用的是git bash

一旦发生这种情况,您在创build存储库之后遵循GitHub指令。 Git会指示你添加你的遥控器。

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

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

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

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

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

  1. 下载git

http://git-scm.com/

  1. 安装它

  2. 启用ssh-agent

C:\ Program Files \ Git \ cmd

启动的ssh-agent

对我来说,我试过这个 –

 eval "$(ssh-agent -s)" 

然后我跑

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

并生成可以运行的密钥

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

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

您可以将此密钥存储到github中以获取更多信息。 向您的GitHub帐户添加一个新的SSH密钥

我希望它会帮助别人:)

转到您的GitHub帐户仪表板,find您的项目存储库,单击设置选项卡 – 在部署密钥您必须添加您的SSH密钥。 打开terminal并键入:

 cat ~/.ssh/id_rsa.pub | pbcopy 

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

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

我和@Batman有类似的问题。 但是,因为我在/ usr / local / src / projectname下运行了这个,所以没有sudo的情况下运行不是一个选项。

只需添加-E标志来预先保存环境(〜/ .ssh /path)。

$ sudo -E git clone git@your_repo

从男人sudo:

-E,–preserve-env表示用户希望保留其现有环境variables的安全策略。 如果用户没有权限保护环境,安全策略可能会返回一个错误。

我有2个Github身份文件加载在ssh代理中。 我的个人钥匙和另一个客户项目。

我删除了引起混淆的密钥:

ssh-add -d id_rsa_github_somekey

TL;博士

~/.ssh/config

 PubkeyAcceptedKeyTypes=+ssh-dss 

场景如果你正在使用openSSH> 7的版本,就像在触摸板MacBook Pro上说的那样,它是ssh -V
OpenSSH_7.4p1, LibreSSL 2.5.0
ssh -V
OpenSSH_7.4p1, LibreSSL 2.5.0

你还有一个老的Mac,最初把你的密钥放在Github上,可能是用id_dsa键。 OpenSSH v7在默认情况下不会使用这些DSA密钥(包括这个ssh-dss ),但是您仍然可以通过将以下代码添加到~/.ssh/config

 PubkeyAcceptedKeyTypes=+ssh-dss 

为我工作的来源是这个Gentoo时事通讯

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

你可以试试这个方法

在这里输入图像说明

在这里输入图像说明

select另一个链接