ChatGPT解决这个技术问题 Extra ChatGPT

无法推送到 Heroku,因为密钥指纹

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

!您的带有指纹 xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx 的密钥无权>访问 my_heroku_app。致命:远端意外挂断

登录heroku后,我尝试管理我的密钥。如果我输入我的控制台“heroku 键”,那么我得到:

myemailaddress 没有密钥。

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

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

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


G
Giordano Scalzo

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

最后,我找到了解决方案:我必须在我的机器中添加我的新 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

像魅力一样工作!

希望这可以帮助。


这对我来说真的很接近。但还有一件事。我有两个heroku帐户。第一个为我的机器添加了我的默认 SSH 密钥。无论我做了什么尝试修复我的第二个帐户,直到我从第一个帐户中删除了我的默认密钥。 SSH-AGENT 默认会发送第一个密钥,导致这个问题。解决方法是为每个帐户的 heroku(不是默认)创建特定的密钥
我和@TomCarchrae 有同样的问题。我退出了似乎被 heroku logout 永久破坏的帐户,登录到另一个帐户,并从该帐户中删除了默认的 RSA 密钥。之后,我可以使用这个新生成的密钥进行推送。
就我个人而言,虽然我是 ssh-add ~/.ssh/identity.heroku.foo,但我做了相当于 ssh-add ~/.ssh/id_rsa_heroku 的操作,因为我也在使用 https://github.com/ddollar/heroku-accounts(Heroku 的多客户经理)。
要记住的另一件事 - 如果您有太多 SSH 密钥,它将无法登录,因为它会按顺序尝试密钥(然后您会因登录失败而被踢出)。这似乎是 ssh-agent 的一个缺陷(无论如何在 ubuntu 中,但我认为其他实现也是如此)。因此,如果您要拔掉头发,请尝试移动您的 ~/.ssh 目录并开始一个新目录(然后您可以一个接一个地拉入密钥)。
您可以通过在 ~/.ssh/config 中为 heroku.com 添加一个指向您想要的密钥的主机条目来影响发送哪个密钥。这对我来说是一个快速修复,因为它一直尝试使用我的默认密钥并失败。但是,这在多个帐户的情况下可能无济于事。
t
towynlin

我也有多个密钥和多个 Heroku 帐户,所以我每隔几个月就会遇到这个问题。正如 Giordano Scalzo、Tom Carchrae 和 user664833 所提到的,主要问题是您使用 ssh-add 命令控制的 ssh-agent。手册页 (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

这对我来说效果很好,但是尝试添加我的默认 ssh 密钥一直提示输入密码(在 Mtn Lion 上),不认为我有吗?重新启动并恢复到我的默认 ssh 一切正常 - 还发现这个 stackoverflow.com/questions/7927750/… 效果很好
把我的头撞在墙上很长一段时间,这是所需的最后一步 - 谢谢!
如果您尝试了第一种方法,那么这个方法(并且当您尝试推送到 Heroku 远程时收到 Permission Denied(publickey) 错误)您可能忘记重新运行 heroku keys:add 命令。无论如何,非常感谢你!这为我做到了。
D
Daniel X Moore

您的计算机有一个 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/*

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


是的,这也是我的问题。从同一个客户端访问两个 Heroku 帐户。谢谢。
我正在尝试执行此方法,但“Host heroku-alt”给了我错误:Host heroku-alt not found: 3(NXDOMAIN)。我把它放在山狮的终端上。 ~/.ssh/config 也不存在,只有一堆 .pub 文件和一个名为 known_hosts 的文件。和想法?
@Jascination 您将需要创建 ~/.ssh/config 并放入答案中列出的内容。完成后保存文件,它将包含 HostHostNameIdentityFile 行。然后它应该可以正常工作。
出色的!这种技术太优雅了!
男人!你真棒。一步一步地执行终于让我松了一口气。谢谢你 !!
p
pixelearth

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

Heroku 通过两种方式识别您:

第一个在 .git/config

[heroku]
    account = acccount_name

这似乎让您可以使用 heroku 执行基本操作

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

此密钥对用于强加密,并在推送代码更改时将您唯一标识为开发人员。

因此,您使用的每个 heroku 帐户在使用 ssh 时都必须向 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 时使用它。使用您在 .ssh/config 中设置的虚拟域,而不是 heroku.com

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


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

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


唯一的主机名是我的问题。非常感谢像素地球。
a
akmur

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

运行后指定新文件名

ssh-keygen

然后(在我的情况下)

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

B
Benjamin

我上周有同样的问题。这个链接帮助了我。我希望它对你有所帮助。 http://devcenter.heroku.com/articles/keys


我已经看到该链接,试图再次删除并添加我的密钥,但我仍然无法让它工作。
你把这个问题解决了吗?
你能总结一下这个链接上的说明吗?我们尽量避免在这里仅链接答案。
这仅说明如何生成密钥而不是如何管理多个密钥。
M
M. Scott Ford

在我的例子中,heroku keys 已经列出了正确的密钥。所以,我所要做的就是运行 ssh-add /path/to/that/key,然后一切都开始正常工作了。


F
Fabio CR

我还有两个 Heorku 帐户,作为一种变通方法,我“邀请”了我的主帐户(Heroku 自动使用其密钥的那个)作为我项目的合作者。


R
Rails beginner

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

首先下载“Putty Key generator” 使用它创建一个密钥 OBS 您需要将鼠标移到空白区域以生成随机性。保存您的密钥,只需记住将您的密钥重命名为 [name].pub 运行 heroku 密钥:在终端中添加!


g
gfhuertac

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