git push heroku master出现Permission denied (publickey)错误。致命错误:远程终端意外挂断。

85

请容许我发泄一下不满,但我会尽力克制自己,因为Heroku正在将Stack Overflow作为其客户支持(我认为这至少也太草率了)。

在过去的五个小时里,我一直在尝试发布一个应用程序,但总是在密钥方面出了问题。我已经阅读了数十篇文章,并尝试了一个又一个技巧,以找出Heroku在这个愚蠢、完全不透明的过程中哪里出了问题。

我的使用场景并不那么复杂:我已经为我的Heroku应用程序创建了一个新的密钥对。我已经将该密钥设置为我的密钥:

  > heroku keys
  === travis@xxxx.com Keys
  ssh-rsa AAAAB3NzaC...avOqfA7ZBd travis@xxxx.com

我能够成功登录并“创建”一个应用程序(名称很愚蠢,因为它似乎只是在创建Git存储库,而不是任何类型的应用程序)。但是每一次我尝试推送我的应用程序时,都会出现以下问题:

  > git push heroku master
  Permission denied (publickey).
  fatal: The remote end hung up unexpectedly

我对这个问题毫无头绪,只能继续敲击键盘,希望谷歌神能够解答。但谷歌并没有给出答案(好吧,让我收回之前的话,我看到了约十几种方法可以解决这个问题)。

对于一个应该很容易的系统来说,这简直是个笑话。我喜欢Heroku的理念,但是花费了五个小时什么都没做成,我开始考虑是否选择错了。


7
我告诉你,我们为Heroku提供的客户支持是一流的糟糕。 - Robert Harvey
7
同样的问题,这里有解决方案:http://www.whatibroke.com/?p=284。 - user1819430
1
Remi的链接解决方案对我起作用了。 - Deborah
我喜欢这个问题中的挑战 - 我曾经多次遇到过这种情况。我已经记不清没有 Stack Overflow 是什么样子了(而且我也不想记得)。 - Damien Del Russo
@Travis 是对的。无论客户服务多么出色,都不应该是这样的。 作为一名用户体验设计师,拥有长期的软件开发背景,我知道自己在说什么。 我们开发人员在以开发者的身份思考(戴上开发者帽子)时,并没有权利设计 UI 交互。 想想这种情况:用户(现在是 Travis)收到一条消息,告诉他出了问题,但没有提示如何继续操作。 当然,对于开发这个应用程序的人来说,这条消息很明确,因为他的背景相当独特。 - Juan Lanus
显示剩余2条评论
6个回答

149

网上有各种解决方案。我将尝试将可用选项压缩成一篇文章。请在每个步骤后再次尝试您的连接。

  • Step 1: Attempt adding you public key to Heroku

    heroku keys:add ~/.ssh/id_rsa.pub // or just heroku keys:add and it will prompt you to pick one of your keys
    
  • Step 2: Generate a new set of SSH keys, then attempt the first step again

    https://help.github.com/articles/generating-ssh-keys

  • Step 3: Verify and/or modify your config file

    vim ~/.ssh/config
    
    Host heroku.com
    Hostname heroku.com 
    Port 22 
    IdentitiesOnly yes 
    IdentityFile ~/.ssh/id_rsa    <--- Should be your public SSH key
    TCPKeepAlive yes 
    User jsmith@gmail.com
    
  • Step 4: Remove the heroku remote from git, the recreate the connection, adding the remote via heroku create will only be an option for new repositories. Be sure to delete your old repo that you originally attempted to create

     $ git remote rm heroku
     $ heroku create
    
  • Step 5: Reinstall Heroku Toolkit


10
第一步对我有帮助!(在将它们推送到Heroku之前,我重新创建了我的机器和Github的SSH密钥。)谢谢! - ATSiem
1
尽管我非常仔细地从头开始两次进行了干净的安装和一切,但这些都对我没有用。最后让所有东西都正常工作的是确保我的GitHub密钥和Heroku密钥相同。我甚至不明白为什么会有所不同,除非我某种方式没有注意到Heroku依赖于GitHub,但它以某种方式解决了问题。可以在GitHub的帐户设置中更改密钥。我认为你应该把这个加入到你的答案中。 - temporary_user_name
1
我认为IdentityFile行应该是您的私人ssh密钥。请参见https://dev59.com/A2855IYBdhLWcg3wj1MS#8874946。 - Paul
2
你的意思是 heroku create 吗?据我所知,git heroku create 并不存在。 - Michael Dorst
1
哇,我无法想到任何关于这个经历的愉快的话。我按照许多步骤进行操作,包括卸载/重新安装git、github以及用msysgit替换putty。最终通过了1-3步骤,但是更改需要在github ssh_config中进行。在多次删除和重置我的github密钥而没有任何问题后,heroku过程真的非常令人沮丧。 - wilk
显示剩余3条评论

13

你的Heroku密钥和Github密钥不同步。

  • 确定要使用哪个密钥(建议创建一个新密钥,例如heroku_rsa)。

  • 将该密钥添加到Github中。

  • 使用以下命令将相同的密钥添加到Heroku中:heroku keys:add


4
我非常非常非常希望我四个小时前就读过这个答案。虽然我想我一路上也学到了很多,所以并不全是坏事。 - temporary_user_name
我有两个不同的Heroku账户(一个使用我的工作电子邮件,用于工作项目;另一个使用我的个人电子邮件,用于自由职业项目)。Heroku不允许我在两个账户中使用相同的密钥。那么我应该如何在两个账户上都使用我的Github密钥呢?(而且为什么Heroku会特别需要使用我的Github密钥呢?Heroku与Github有什么关系?如果我没有使用Github怎么办?)我很困惑。 - callum
运行良好!谢谢! - Shashank

2
我遇到了相同的问题,以下是我的理论:
我很久以前注册了Heroku,给他们提供了我的Github公钥。当我尝试使用常规命令"git push heroku master"时,它会查找我的私钥,在"~/.ssh/github_rsa"中找到。然后它会无声地失败,并显示你发布的消息。
但是,后来我尝试使用"-i"标志登录另一台服务器,以指定我的"身份文件"(即私钥),它提示我输入私钥密码。解锁了私钥之后,“git push heroku master”命令可以正常工作。得出以下结论:
- 当您使用ssh登录时,会提示您输入身份文件的密码,但git不会。 - 如果您使用其他方法解锁身份文件,例如ssh,则它将保持解锁状态,供git使用。 - 看起来没有任何文档说明如何永久删除身份文件上的密码保护,包括常见的Unix命令keytool。 - 以上解决方案创建新的公钥/私钥对似乎是解决此密码问题的一种解决方法,而不知道这是问题的原因。


1

据我所知,问题似乎是由于我在后台运行了ssh-agent,并且相关的私钥尚未被添加。

ps -afe | grep ssh-agent

ssh-add ~/.ssh/id_rsa_heroku_github

我还需要将公钥(手动)添加到 Github 和 Heroku。
heroku keys:add ~/.ssh/id_rsa_heroku_github.pub

0
如果其他解决方案都不适用于您,请确保您已使用您的帐户而不是root帐户登录Linux shell。
这样,如果您正在使用不是SSH密钥所有者的用户运行,Git将寻找错误的密钥进行身份验证。

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