git push heroku master权限被拒绝(公钥)。致命:远端意外挂断


85

请原谅一些无奈,因为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正在进行的工作没有任何了解。我只是被我的头撞在键盘上,无法追索,但希望谷歌的全能神能回答。谷歌没有回答(嗯,让我回顾一下,我已经看到了十几种回答这个问题的方法)。

对于本来应该很简单的系统,这是一个笑话。我喜欢Heroku的想法,但是在花了我们五个人才能完成任何事情之后,我想这可能是错误的选择。


7
我会让您知道,我们为Heroku提供的客户支持是一流的伪劣产品。
罗伯特·哈维

1
SO的回答质量给我留下了深刻的印象。我只是认为,无论技术如何,为客户提供产品支持都是一种la脚的方式。如果我必须提供个人帐户详细信息,该怎么办?不完全是我想与世界分享的内容(正如我在需要修改原始帖子时意识到的那样)。
特拉维斯·詹森

你看到这个问题了吗?特别是关于用git注册公钥的部分?
肯·怀特

7
相同的问题,在此处获得解决方案:http

1
Remi的链接解决方案为我工作。
Deborah 2013年

Answers:


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


10
步骤1帮了我大忙!(但是在将它们推送到Heroku之前,我确实为机器和Github重新创建了SSH密钥。)谢谢!
ATSiem

1
尽管我从上至下两次精心安装了干净的安装程序,但一切都没有对我有用。最后,使所有工作都完成的是确保我的GitHub密钥和Heroku密钥相同。我什至不知道为什么会有所不同,除非我以某种方式未能注意到Heroku依赖GitHub,但是以某种方式它解决了这个问题。可以在GitHub上的帐户设置中更改密钥。我认为您应该将此添加到您的答案中。
临时用户名

1
我相信IdentityFile行应该是您的私钥。参见stackoverflow.com/a/8874946/2816571
Paul

2
你是说heroku creategit heroku create据我所知,这不是一回事。
2014年

1
哇。对于这种经历,我想不出任何令人愉快的说法。我遵循了许多食谱,包括卸载/重新安装git,github和使用msysgit替换腻子。步骤1-3终于做到了,但是更改需要在github ssh_config中进行。在几次没有任何问题的情况下删除并重置我的github键之后,heroku进程确实令人沮丧。
2014年

13

您的heroku键和github键不同步。

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

  • 将密钥添加到github。

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


4
真的,真的,真的希望我四个小时前读过这个答案。尽管我认为自己在此过程中学到了很多东西,但是,并不是所有的事情都不好。
临时用户名

我有两个不同的Heroku帐户(一个使用我的工作电子邮件,用于工作中的项目,另一个使用我的个人电子邮件,用于自由项目)。Heroku不允许我为两者使用相同的密钥。那么我该如何同时使用我的Github密钥呢?(为什么Heroku特别需要使用我的Github密钥?Heroku与Github有什么关系?如果我不使用Github怎么办?)我是如此困惑
callum

像魅力一样工作!谢谢!
Shashank

2

我遇到了同样的问题,这是我关于发生的事情的理论

我很久以前就注册了Heroku,并给了他们我的github公钥。尝试使用通常的方法时git push heroku master,它会寻找位于的我的私钥~/.ssh/github_rsa。然后,它以您发布的消息静默失败。

但是,我稍后尝试ssh使用该-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

如果没有其他的解决方案,为你工作,确保你登录了Linux的外壳,您的帐户并没有帐户。

这样,如果您与不是ssh密钥所有者的用户一起运行,则git将查找错误的密钥以进行身份​​验证

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.