由于密钥指纹无法推到Heroku


131

我是Rails的新手,我试图将一个非常简单的应用程序部署到Heroku。这是我部署的第二个应用程序,而我第一个能够做到的很好。但是,我对此有一些问题。每当我“ git push heroku master ”时,都会出现此错误:

!您的指纹为xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx的密钥无权访问my_heroku_app。

致命:远端意外挂断

登录heroku后,我尝试管理我的密钥。如果我在控制台中输入“ heroku keys ”,则会得到:

没有用于myemailaddress的密钥。

但是,如果我运行命令“ heroku keys:add ”,我会得到

找到现有的公共密钥:/Users/michele/.ssh/id_rsa.pub上传ssh公共密钥/Users/michele/.ssh/id_rsa.pub!指纹已经存在。请每个Heroku帐户使用一个ssh密钥

请帮我!这太令人沮丧了,我不知道怎么了!谢谢

Answers:


288

我遇到了同样的问题,我关注了这篇文章和其他同类文章,但没有成功:-((

最终,我找到了解决方案:我必须在机器中添加新的rsa身份!

因此,首先,我创建了一个新的rsa密钥:

ssh-keygen -t rsa -C "giordano.scalzo[at]gmail.com" -f  ~/.ssh/id_rsa_heroku

然后将其添加到我的机器上

ssh-add ~/.ssh/id_rsa_heroku

最后是Heroku

heroku keys:add ~/.ssh/id_rsa_heroku.pub

之后,

git push heroku master

像魅力一样运作!

希望这可以帮助。


47
这对我来说真的很近。但是还有一件事。我有两个heroku帐户。第一个为我的机器添加了我的默认SSH密钥。不管我尝试修复第二个帐户是什么,直到我从第一个帐户中删除了默认密钥后,它都不会发生。SSH-AGENT默认会发送第一个密钥,从而导致此问题。解决方法是为每个帐户创建Heroku的特定键(非默认)
汤姆Carchrae

13
我有和@TomCarchrae相同的问题。我注销了似乎永久被破坏的帐户heroku logout,登录到另一个帐户,并从该帐户中删除了默认的RSA密钥。之后,我可以使用这个新生成的密钥进行推送。
罗斯·艾伦

14
对于我个人来说,我做的等价ssh-add ~/.ssh/id_rsa_heroku虽然我的是ssh-add ~/.ssh/identity.heroku.foo因为我还使用https://github.com/ddollar/heroku-accounts(多账户经理的Heroku)。
user664833

1
需要牢记的另一件事-如果您有太多的SSH密钥,它将无法登录,因为它会按顺序尝试密钥(然后您会因为太多失败而被踢出登录)。这似乎是ssh-agent的缺陷(无论如何在ubuntu中,但我也假定其他实现)。因此,如果要拔头发,请尝试移动〜/ .ssh目录并开始一个新目录(然后可以一个一个地插入键)。
汤姆·卡克莱

7
您可以通过在〜/ .ssh / config中为heroku.com添加指向所需密钥的主机项来影响发送哪个密钥。这对我来说是个快速修复,因为它一直尝试使用我的默认密钥而失败。但是,对于多个帐户,这可能无济于事。
dnewcome 2012年

61

我也有多个密钥和多个heroku帐户,因此每隔几个月就会遇到这个问题。如Giordano Scalzo,Tom Carchrae和user664833所述,主要问题是ssh-agent,您可以使用ssh-add命令对其进行控制。手册页(man ssh-add)实际上非常简洁明了,因此请查看。

您可以列出ssh​​-agent知道的所有键:

ssh-add -l

您可以使用以下命令删除ssh-agent知道的所有键:

ssh-add -D

或使用删除特定的密钥

ssh-add -d ~/.ssh/id_rsa_example_key_file_use_your_own

不用担心 您实际上并没有删除密钥,仅更改了ssh-agent自动尝试使用的密钥,例如,当您尝试推送至heroku时。根据需要添加和删除密钥很容易,因此,对于我来说,当我对此问题感到沮丧时,最简单的解决方法是删除所有密钥,然后仅添加当前要使用的密钥。

ssh-add -D
ssh-add ~/.ssh/id_rsa_example_use_this_one_i_mean_it

1
这对我来说效果很好,但是尝试添加回我的默认ssh密钥,不断提示输入密码短语(在Mtn Lion上),难道我没有一个吗?重新启动并恢复到我的默认SSH一切正常-还找到了这个stackoverflow.com/questions/7927750/…效果很好
house9 2012年

在这上面将我的头撞在墙上好一阵子,这是所需的最后一步-谢谢!
griswoldbar

如果您尝试了第一种方法,则尝试了第一种方法(当您尝试将其推送到Heroku远程服务器时,出现了Permission Denied(publickey)错误),您可能忘记了重新运行heroku keys:add命令。无论如何,非常感谢!这为我做到了。
Hairgami_Master 2013年

38

您的计算机具有SSH密钥,但是该SSH密钥与另一个Heroku帐户关联。

如果您需要将两个帐户用于同一台计算机上的不同应用程序,则应在计算机上创建一个新的SSH密钥并将其上传到Heroku:

$ ssh-keygen

当提示询问您时,请确保将其另存为“ /Users/User/.ssh/new_id_rsa.pub”。

$ heroku keys:add /Users/User/.ssh/new_id_rsa.pub 

然后,您需要添加一个备用主机为heroku.com~/.ssh/config

Host heroku-alt
HostName heroku.com
IdentityFile ~/.ssh/new_id_rsa

然后更新.git/config项目中的以使用主机别名:

[remote "heroku"]
  url = git@heroku-alt:myapp.git
  fetch = +refs/heads/*:refs/remotes/heroku/*

通过在特定项目的文件之间herokuheroku-alt在其中进行远程选择,.git/config您可以管理哪些项目使用哪些凭据。


1
是的,那也是我的问题。从同一客户端访问两个Heroku帐户。谢谢。
伯纳德

我正在尝试执行此方法,但是“ Host heroku-alt”给我错误:Host heroku-alt not found: 3(NXDOMAIN)。我把它放在山狮码头上。~/.ssh/config也不存在,只有一堆.pub文件和一个叫做的文件known_hosts。有想法吗?
JVG 2013年

@Jascination您将需要创建〜/ .ssh / config并放入答案中列出的内容。当您完成保存文件,它会包含HostHostNameIdentityFile线条。然后应该可以正常工作。
Daniel X Moore

3
优秀的!这种技术是如此优雅!
kinopyo

男子!你真棒。逐步执行终于使我松了一口气。谢谢 !!
softvar

14

这是Heroku文档或该问题的其他答案所缺少的非常清楚的解释。至少所有信息似乎都不会出现在任何一个地方。还可以通过帐户工具无法理解的方式让您了解问题。

Heroku通过两种方式识别您的身份:

第一个是在.git / config中

[heroku]
    account = acccount_name

这似乎使您可以使用以下命令执行基本操作 heroku

heroku识别您的第二种方法是通过任何使用ssh(git push)的操作。Heroku将通过您的ssh密钥识别您,如此处所述:https : //devcenter.heroku.com/articles/keys

该密钥对用于强大的加密技术,在推送代码更改时可以唯一地将您标识为开发人员。

因此,使用ssh时,您要使用的每个heroku帐户都必须向heroku发送一个不同的密钥。按照任何教程创建ssh密钥。

关键是让SSH为每个Heroku帐户使用不同的密钥。您如何配置呢?您需要做两件事:

1)您需要创建一个“虚拟”域,您的.ssh / config将对其进行拦截并重新配置。这将告诉ssh您想要的“实际”域,以及要使用的特殊ssh密钥。

Host heroku.my_unique_key
  HostName heroku.com
  IdentityFile ~/.ssh/identity.heroku.my_unique_key
  IdentitiesOnly yes

2)更改.git / config以在使用git push时使用它。代替heroku.com,使用在.ssh / config中设置的虚拟域

[remote "heroku"]
    url = git@heroku.com.git


[remote "heroku"]
    url = git@heroku.my_unique_key:myapp.git

就是这样:)同时有点复杂和简单。我花了3年的时间撞到墙上,反复试验才能发现此信息。应该在某处清楚地记录下来,但这至少是一个开始。


唯一的主机名是我的问题。非常感谢pixelearth。
FluffyJack

Muchos Gracias Por Favor
EE33,

9

您将需要创建新密钥并添加这些密钥

运行后指定新文件名

ssh-keygen

然后(就我而言)

heroku keys:add /home/alex/.ssh/alex_heroku_rsa.pub

3

我上周有同样的问题。这种联系帮助了我。希望对您有所帮助。http://devcenter.heroku.com/articles/keys


我已经看到了该链接,试图再次删除并添加我的密钥,但是仍然无法正常工作。
mre 2012年

您解决了这个问题吗?
本杰明

1
您可以在此链接中总结说明吗?我们尝试在此处避免仅链接答案。
蜡鹰

这仅说明了如何生成密钥,而不是如何管理多个密钥。
Macario 2012年


2

我还有两个Heorku帐户,并且作为变通办法,我“邀请”了我的主帐户(该帐户的密钥由Heroku自动使用)作为我项目的合作者。


1

只是不想为Windows用户添加解决方案。

  1. 首先下载“ Putty Key Generator”

  2. 使用OBS创建密钥,您需要将鼠标移至空白区域以产生随机性。

  3. 保存您的密钥,只是记住将您的密钥重命名为[name] .pub

  4. heroku keys:add在终端中运行!


0

就我而言,问题是我使用的ssh版本。我只是将GIT_SSH环境变量设置为另一个(“ GIT_SSH = / usr / bin / ssh”),一切对我来说都正常。

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.