无法理解Heroku中的ssh系统

时间:2012-07-06 07:52:42

标签: heroku ssh

我无法获得管理ssh密钥的系统。

我想将应用程序推送到Heroku,所以我试图推送但得到错误。

这是我的日志

    $ git push heroku master
  !  Your key with fingerprint bf:f6:ed:14:9d:cd:52:a2:a3:16:b2:e9:b4:f2:bf:ba is not authorized to access warm-samurai-6574.
  fatal: The remote end hung up unexpectedly
  User@PK /e/examples (master)
  $ heroku keys:add
  Found existing public key: C:/Users/User/.ssh/id_rsa.pub
  Uploading SSH public key C:/Users/User/.ssh/id_rsa.pub
  !This key is already in use by another account. Each account must have a unique key.
  User@PK /e/examples (master)
  $ heroku keys
  === 1 key for denys.medynskyi@gmail.com
  ssh-rsa AAAAB3NzaC...etyxYh4Q== User@PK

每个帐户都有自己的ssh密钥。所以我可以从任何计算机上推,因为ssh键正在推送到heroku?

heroku上的每个应用程序都应该有自己的ssh密钥?

4 个答案:

答案 0 :(得分:34)

基本上,您的计算机有一个SSH密钥。但是,它上面的SSH密钥与另一个Heroku帐户相关联(与您现在使用的帐户不同)。您最好的选择是生成一个全新的SSH密钥并将其添加到Heroku。

只需在您的计算机上创建一个新的SSH密钥并将其上传到Heroku:

$ ssh-keygen

当提示问你时,请确保将其保存为'/Users/User/.ssh/new_id_rsa.pub'。

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

这应该允许你使用Heroku。

至于您的其他问题:只要您通过heroku keys:add添加计算机的SSH密钥,就可以从任何计算机上推送到Heroku。不,每个应用程序都不需要拥有自己的SSH密钥。

答案 1 :(得分:15)

您的计算机有SSH密钥,但该SSH密钥与另一个Heroku帐户相关联。如果您需要在同一台计算机上同时使用这两个帐户,您应该在您的计算机上创建一个新的SSH密钥并将其上传到Heroku:

$ ssh-keygen

当提示问你时,请确保将其保存为'/Users/User/.ssh/new_id_rsa.pub'。

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

然后,您需要将另一个主机添加到~/.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/*

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

答案 2 :(得分:6)

Heroku要求SSH密钥对帐户是唯一的。两个帐户不能具有相同的ssh密钥。

您可以执行以下任一操作来解决您的问题:

  • 取消ssh密钥与其他heroku帐户的链接。您可能没有使用该帐户。这是阻力最小的道路。
  • 删除现有密钥。生成新的ssh公钥/私钥对。优点是您将保留密钥的默认名称,因此您将使用的任何应用程序自动找到它。
  • 生成新的ssh公钥/私钥对,并将其与现有密钥一起保存。缺点是,这两个键将具有自定义名称。如果您最终经常使用这些密钥,则需要在本地设置configure ssh以使用这些密钥而不是默认的id_rsa。这确实需要一些工作并可能参与其中。

你选择哪一个取决于你。

如果您选择第三个选项,请参阅此答案https://superuser.com/a/272613/25665,了解如何在本地配置ssh以始终使用heroku的新密钥。如果你想知道为什么要这么麻烦,那么你将通过推送到git存储库与heroku进行交互。这需要您使用ssh进行身份验证。默认情况下,它将使用较旧的键,您将无法推送。在与warm-samurai-6574.heroku.com

交互时,更容易告诉ssh使用备用密钥

以下链接提供了有关创建新密钥的说明。您需要接受默认名称或根据您选择的选项提供自定义名称。 https://devcenter.heroku.com/articles/keys

你能从任何电脑上推吗?

再次,这取决于。如果计算机具有您的ssh密钥并且其配置为使用您的密钥用于heroku域,那么是。您可以选择不在那里复制密钥,只需将存在的ssh密钥添加到您的heroku帐户即可。

每个应用都需要一个唯一的密钥吗?

没有。您可以在一个heroku帐户下拥有多个应用。他们都将分享您上传到heroku帐户的密钥。

答案 3 :(得分:0)

让我看看我是否正确理解这一点。 大多数回复都同意我们用于git的ssh密钥识别计算机,因为他们提出的建议是在另一台计算机上重新生成密钥并将其上传到Heroku。 从我的角度来看,SSH密钥应该将我识别为应用程序的开发者,这就是造成混淆的原因。这意味着我必须带上我的私钥和公钥,并在我使用的任何计算机上使用它,这可以用pendrive或类似的东西来完成。 所以我的建议是:复制你的公钥和私钥,把它们放在你想用来推送到Heroku的计算机上,并用密码保护你的私钥。