Heroku“权限被拒绝(publickey)致命错误:无法从远程仓库读取”的困扰

148
我花了好几个小时搜索解决我的问题,这个问题理应很容易解决,但我却无法从我的Mac通过push、pull或fetch到Heroku repository。每次尝试都会给我以下错误信息:“Permission denied (publickey). fatal: Could not read from remote repository.'” 我尝试过许多不同的方法,甚至删除了Heroku上的应用并重新创建了一个,但始终没有解决问题。我可以从GitHub存储库中获取内容,因此我知道这不是网络连接问题。我已经登录到我的Ubuntu Amazon AWS ec2实例中,从那里轻松地拉取和推送到Heroku。出于这个原因,我仍然觉得问题在于我的Mac上的ssh密钥。这两个密钥都显示在我的Heroku帐户下。请问,密钥末尾的电子邮件地址是否有影响?最后,我想尝试任何可能解决问题的方法,谢谢!

你有为你的Heroku密钥设置密码吗?我猜这个(https://dev59.com/qHLYa4cB1Zd3GeqPZIsM#16753800)没有帮助?或者再检查一下https://dev59.com/qHLYa4cB1Zd3GeqPZIsM#16753800。 - VonC
很遗憾,它仍然无法工作。 - thebradbain
有时候当Heroku正在维护时会出现这种情况:https://status.heroku.com/。 - Mavis
14个回答

292

我知道这个问题已经有答案了。但是我想添加我的解决方法,因为它可能对将来的其他人有帮助。

常见的关键错误是:Permission denied (publickey)。你可以使用keys:add通知Heroku你的新密钥来解决这个问题。

简而言之,请按照以下步骤操作:https://devcenter.heroku.com/articles/keys

首先,如果你没有密钥,你必须创建一个:

ssh-keygen -t rsa

第二步是将密钥添加到Heroku:
heroku keys:add

2
谢谢 Kris,来自未来的某个人 :) 这对我有效。 - Ahmad Ajmi
9
我猜我的教程漏掉了 heroku keys:add 这一步... 谢谢! :) - Ole Henrik Skogstrøm
4
第一个步骤是不必要的。如果你没有密钥,heroku keys:add 命令可以帮助你创建一个。 - Mygod
如果未生成RSA,请运行ssh-keygen -t rsa,否则应该足够运行heroku keys:add - Volatil3
如果其他人也遇到了这个问题,在生成新密钥并执行heroku keys:add之后,我还需要在我的~/.ssh/config文件中添加一个条目,将我的新SSH密钥指定为Host heroku.comIdentityFile - digitalronin
显示剩余2条评论

123

我想和大家分享一下,我找到了自己问题的答案。

把问题写下来让我更加清晰地认识到了它,然后我进一步调查了我认为问题出现的地方:ssh密钥。

结果证明我的想法是正确的。问题不在于密钥本身,而是我没有将其添加到我本地Mac的已知ssh密钥列表中。因此,即使我的Heroku账户已经上传了正确的密钥,但由于我的Mac电脑上找不到该密钥,所以无法进行身份验证。解决方案是什么?

ssh-add ~/.ssh/id_rsa
#and, to confirm it's been added to the known list of keys
ssh-add -l

我希望给予https://help.github.com/articles/error-permission-denied-publickey应有的认可,因为它是一个很好的参考资料。


5
谢谢您的反馈,比我最初的评论更贴切您的情况。+1 - VonC
4
在Windows操作系统中,您需要启动Git Bash(右键单击一个文件夹),并启动一个ssh-agent,可以通过运行"ssh-agent"(请注意反引号)来实现,然后按照上述方法添加密钥。每次启动Git Bash/ssh-agent时,都需要执行此操作,否则它会忘记已添加的内容。 - TWiStErRob
我尝试了这个方法,但仍然无法正常工作。最终我不得不添加一个名为HOME的环境变量,并将其设置为我的.ssh文件夹所在的目录。 - Justin
谢谢 - 我永远不会想到这个! - Mark Hansen
这解决了我的问题,而不是那个得到更高票数的答案,谢谢 :) - Ryan Brodie

32

我遇到了完全相同的错误(在Windows 7上),但原因不同。我以一种不同的方式解决了它,所以我想在这里为其他人添加原因和解决方案。

尽管错误似乎指向了Heroku,但实际上错误是说“Heroku无法访问git存储库”。我发誓所有服务器上都有相同的密钥,因为我同时在一个接一个地创建它并将其上传到服务器上。

在花费了将近一天的时间后,我意识到由于git只显示指纹而不是实际密钥,我无法验证它的密钥是否与我的硬盘或Heroku上的密钥匹配。我查看了known hosts文件,猜猜看……它显示每个服务器的密钥,我清楚地看到git和Heroku公钥不匹配。

1)删除密钥文件夹中的所有文件,使用github网站删除密钥以及使用git bash和命令heroku keys:clear从heroku中删除密钥

2)按照github的说明在此处生成新的密钥对,并将公钥上传到git

3)使用git bash-heroku keys:add将相同的密钥上传到Heroku。

现在git push heroku master可以工作了。

真是一场噩梦,希望这能帮助到有需要的人。

Bryan


1
我在这个问题上苦苦思索,直到看到了你的帖子。当我把git和heroku的密钥设置成相同的时候,一切都好了。但是我不明白为什么它们需要相同。 - Kishore Masand
感谢您的回答,我花了很长时间来解决这个问题。 - Ivan Bacher
非常有用的Git文档链接,一切都完美。 - HotJard
在试了几天后,这对我有用。我很惊讶Heroku有这么严重的易用性问题还能继续经营下去。应该有一种更简单的方法来完成这个任务。 - Luke
谢谢。对我有用;只有一件事:在github链接中某处说要执行“ssh-add”。我遇到了问题,但我在这里找到了解决方案:https://dev59.com/fGMm5IYBdhLWcg3wIsQ2 - Alin Ciocan

17

我遇到的问题是,我只在GitHub账户上使用了https。我需要确保我的GitHub帐户设置为ssh访问,并且GitHub和Heroku都使用相同的公钥。以下是我采取的步骤:

  1. 导航到~/.ssh目录,如果有id_rsa和id_rsa.pub,请删除它们。我使用新密钥开始,尽管这可能不是必要的。

$ cd ~/.ssh
$ rm id_rsa id_rsa.pub
  • 按照gitHub上的步骤生成SSH密钥
  • 登录heroku,创建一个新站点并添加您的公钥:

  • $ heroku login
    ...
    $ heroku create
    $ heroku keys:add
    $ git push heroku master
    

    6

    我遇到了与Linux Ubuntu类似的问题,不过已经解决了。看起来操作系统混淆了/root/.ssh/和home/user/.ssh/目录,我的做法是:

    1. 从root和home/user .shh目录中删除所有密钥。
    2. 生成一个新密钥,确保注意创建路径(/home/you/.ssh/id_rsa)或(/root/.ssh/id_rsa)
    3. 检查Heroku密钥 heroku keys
    4. 如果那里有密钥,请清除heroku keys:clear
    5. heroku keys:add现在如果Heroku找不到密钥并要求立即生成一个,则意味着您与我遇到了相同的问题。在此处执行add命令,例如heroku keys:add /root/.ssh/id_rsa.pub,添加的路径将是步骤2中获得的路径。
    6. 现在尝试git push heroku master

    3

    在Windows 8上的操作步骤

    1. 将ssh-keygen目录添加到系统PATH变量中,通常为C:\Program Files (x86)\Git\bin

    2. 打开CMD,进入C:\Users\Me\目录

    3. 生成SSH密钥 ssh-keygen -t rsa

      输入要保存密钥的文件名(//.ssh/id_rsa):.ssh/id_rsa (将默认不正确的路径更改为.ssh/somegoodname_rsa)

    4. 将密钥添加到Heroku heroku keys:add

      从列表中选择创建的密钥

    5. 进入应用程序目录,编写一些优美的代码

    6. 初始化git仓库 git init git add . git commit -m 'chore(release): v0.0.1

    7. 创建Heroku应用程序 heroku create

    8. 部署您的应用程序 git push heroku master

    9. 打开您的应用程序 heroku open


    2

    我遇到了同样的错误,因为我有4个ssh密钥,所以我尝试按照以下步骤进行:

    ssh-keygen -t rsa
    heroku keys:add
    

    接下来,会显示四个选项:
    1) github_rsa.pub
    2) id_boot2docker.pub
    3) id_rsa.pub
    4) sshkey.pub
    

    我选择第三个选项,也就是最新的版本。

    接着,我修复了这个错误。


    2

    我曾经遇到过类似的问题,尝试了很多方法。最终对我有用的是安装在 Windows 上的 Gnu (https://github.com/bmatzelle/gow/releases),并确保它使用该目录内的 ssh 工具而不是 Git 的工具。一旦安装完成,请使用以下命令进行测试(请确保如果它在您的环境变量 PATH 中,则在 Git\bin 之前):

    C:\Git\htest2>which ssh
    C:\Program Files (x86)\Gow\bin\ssh.BAT
    

    我按照这里的说明使用putty和pageant:http://rubyonrailswin.wordpress.com/2010/03/08/getting-git-to-work-on-heroku-on-windows-using-putty-plink-pageant/

    一旦密钥已被发送到Heroku(heroku keys:add c:\Users\Person.ssh\id_rsa.pub),使用:

    ssh -v <username>@heroku.com 
    

    请确保您的堆栈正在使用Putty - 即一个工作堆栈:

    Looking up host "heroku.com"
    Connecting to 50.19.85.132 port 22
    Server version: SSH-2.0-Twisted
    Using SSH protocol version 2
    **We claim version: SSH-2.0-PuTTY_Release_0.62**
    Using Diffie-Hellman with standard group "group1"
    Doing Diffie-Hellman key exchange with hash SHA-1
    Host key fingerprint is:
    ssh-rsa 2048 8b:48:5e:67:0e:c9:16:47:32:f2:87:0c:1f:c8:60:ad
    Initialised AES-256 SDCTR client->server encryption
    Initialised HMAC-SHA1 client->server MAC algorithm
    Initialised AES-256 SDCTR server->client encryption
    Initialised HMAC-SHA1 server->client MAC algorithm
    Pageant is running. Requesting keys.
    Pageant has 1 SSH-2 keys
    Using username "*--ommitted for security--*".
    **Trying Pageant key #0**
    Authenticating with public key "rsa-key-20140401" from agent
    Sending Pageant's response
    Access granted
    Opened channel for session
    Server refused to allocate pty
    Server refused to start a shell/command
    FATAL ERROR: Server refused to start a shell/command
    

    之前运行过但失败了的程序:

    C:\Git\htest2>ssh -v <username>@gmail.com@heroku.com
    OpenSSH_4.6p1, OpenSSL 0.9.8e 23 Feb 2007
    debug1: Connecting to heroku.com [50.19.85.156] port 22.
    debug1: Connection established.
    debug1: identity file /c/Users/Person/.ssh/identity type -1
    debug1: identity file /c/Users/Person/.ssh/id_rsa type 1
    debug1: identity file /c/Users/Person/.ssh/id_dsa type -1
    debug1: Remote protocol version 2.0, remote software version Twisted
    debug1: no match: Twisted
    debug1: Enabling compatibility mode for protocol 2.0
    **debug1: Local version string SSH-2.0-OpenSSH_4.6**
    debug1: SSH2_MSG_KEXINIT sent
    debug1: SSH2_MSG_KEXINIT received
    debug1: kex: server->client aes128-cbc hmac-md5 none
    debug1: kex: client->server aes128-cbc hmac-md5 none
    debug1: sending SSH2_MSG_KEXDH_INIT
    debug1: expecting SSH2_MSG_KEXDH_REPLY
    debug1: Host 'heroku.com' is known and matches the RSA host key.
    debug1: Found key in /c/Users/Person/.ssh/known_hosts:1
    debug1: ssh_rsa_verify: signature correct
    debug1: SSH2_MSG_NEWKEYS sent
    debug1: expecting SSH2_MSG_NEWKEYS
    debug1: SSH2_MSG_NEWKEYS received
    debug1: SSH2_MSG_SERVICE_REQUEST sent
    debug1: SSH2_MSG_SERVICE_ACCEPT received
    debug1: Authentications that can continue: publickey
    debug1: Next authentication method: publickey
    debug1: Trying private key: /c/Users/Person/.ssh/identity
    debug1: Offering public key: /c/Users/Person/.ssh/id_rsa
    debug1: Server accepts key: pkalg ssh-rsa blen 277
    debug1: Trying private key: /c/Users/Person/.ssh/id_dsa
    debug1: No more authentication methods to try.
    Permission denied (publickey).
    

    仅仅想说这是使用的Windows 8 (8.1)操作系统。同时,GoW ssh工具似乎是关键,因为我能够在没有putty组件的情况下使用它,并使用ssh-keygen。 - user3484361

    2

    您需要通过输入以下命令来创建新的SSH密钥:ssh-keygen -t rsa

    然后您需要添加:heroku keys:add

    接着,如果您输入 heroku open 命令,问题就会得到解决。

    对我而言,这个方法很有效,您也可以试试看...


    1
    因为我没有在这里看到,所以我希望你能添加另一个解决方案。我的问题是heroku链接到错误的url(因为我一直在玩弄url名称)。编辑远程url解决了我的问题。
    git remote set-url heroku <heroku-url-here>
    

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