9

我无法获得管理 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

4 回答 4

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,只要您通过heroku keys:add. 不,每个应用程序都不需要拥有自己的 SSH 密钥。

于 2012-07-06T08:18:31.840 回答
16

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

于 2012-11-22T19:21:37.413 回答
6

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

您可以执行其中一项来解决您的问题:

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

你选择哪一个真的取决于你。

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

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

您可以从任何计算机推送吗?

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

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

不可以。您可以在一个 heroku 帐户下拥有多个应用程序。他们都将共享您上传到 Heroku 帐户的密钥。

于 2012-07-06T08:33:56.280 回答
0

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

于 2013-06-29T09:01:42.037 回答