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

时间:2012-08-30 22:59:00

标签: git heroku

请原谅一点挫折,我会尽力控制,因为Heroku使用SO作为他们的客户支持(我认为至少可以说是粗制滥造)。

在过去的五个小时里,我一直试图让应用程序发布,但是密钥总是出现问题。我已经阅读了几十篇文章并尝试了提示,以便找出Heroku正在搞砸的愚蠢,完全不透明的过程。

我的用例并不困难:我为我的heroku应用程序创建了一个新的密钥对。我已将该密钥设为我的密钥:

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

我可以登录并“创建”一个应用程序(愚蠢的名称,因为它似乎创建了一个git repo,而不是任何类型的应用程序)没有问题。但每个 *吓坏了* 时间我尝试推送我的应用,我得到:

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

我对WTF没有任何见解正在进行中;我只是在没有追索权的情况下将头撞在键盘上,而是希望Google的全能之神能够回答它。谷歌没有回答它(好吧,让我把它拿回来,我已经看到了十几种方法来回答这个问题。)

对于一个应该很容易的系统,这是一个笑话。我喜欢Heroku的想法,但在花了五个我们完全没有没有完成之后,我想也许这是错误的选择。

6 个答案:

答案 0 :(得分:149)

网络上有各种各样的解决方案。我将尝试将可用选项压缩到一个帖子中。请在每一步后再次尝试连接。

  • 第1步:尝试将公钥添加到Heroku

    heroku keys:add ~/.ssh/id_rsa.pub // or just heroku keys:add and it will prompt you to pick one of your keys
    
  • 步骤2:生成一组新的SSH密钥,然后再次尝试第一步

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

  • 第3步:验证和/或修改配置文件

    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
    
  • 步骤4:从git中删除heroku远程,重新创建连接,通过heroku create添加远程只会是新存储库的选项。请务必删除您最初尝试创建的旧仓库

     $ git remote rm heroku
     $ heroku create
    
  • 第5步:重新安装Heroku Toolkit

答案 1 :(得分:13)

你的heroku密钥和github密钥不同步。

  • 确定要使用的密钥(建议创建新密钥,即 heroku_rsa)。

  • 将密钥添加到github。

  • 使用<{1}}

  • 相同的键添加到heroku

答案 2 :(得分:2)

我遇到了同样的问题,这是我的理论关于发生了什么:

很久以前我注册了Heroku,给了我github公钥。在尝试通常的git push heroku master时,会查找我的私钥,该密钥位于~/.ssh/github_rsa。然后,它会以您发布的消息静默地失败。

但是,我稍后尝试ssh使用-i标志指向另一台服务器,以指定我的“身份文件”(即私钥),并提示我输入私钥的密码。 “解锁”私钥后,git push heroku master命令有效。一些结论:

  • 虽然ssh会提示您输入身份文件的密码,但git却不会。{/ li>
  • 如果您使用其他方法(例如ssh)解锁身份文件,它将保持解锁状态,以便git使用。
  • 似乎没有关于如何永久删除身份文件上的密码保护的任何文档,包括使用公共unix命令keytool
  • 创建新公钥/私钥对的上述解决方案似乎是此密码问题的解决方法,但不知道问题所在。

答案 3 :(得分:2)

答案 4 :(得分: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

答案 5 :(得分:0)

如果其他解决方案都不适合您,请确保您使用 帐户登录linux shell, root < < / em> 帐户。

这样,如果您使用的用户不是ssh密钥的所有者,git会查找错误的密钥进行身份验证