无法理解Heroku中的ssh系统

skr*_*lyk 9 ssh heroku

我无法获得管理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
Run Code Online (Sandbox Code Playgroud)

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

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

Dan*_* M. 34

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

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

$ ssh-keygen
Run Code Online (Sandbox Code Playgroud)

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

$ heroku keys:add /Users/User/.ssh/new_id_rsa.pub 
Run Code Online (Sandbox Code Playgroud)

这应该允许你使用Heroku.

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


Dan*_*ore 16

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

$ ssh-keygen
Run Code Online (Sandbox Code Playgroud)

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

$ heroku keys:add /Users/User/.ssh/new_id_rsa.pub 
Run Code Online (Sandbox Code Playgroud)

然后,您需要添加另一个主机~/.ssh/config:

Host heroku-alt
HostName heroku.com
IdentityFile ~/.ssh/new_id_rsa
Run Code Online (Sandbox Code Playgroud)

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

[remote "heroku"]
  url = git@heroku-alt:myapp.git
  fetch = +refs/heads/*:refs/remotes/heroku/*
Run Code Online (Sandbox Code Playgroud)

通过之间进行选择heroku,并heroku-alt在偏远.git/config的具体项目,你可以管理文件的项目中使用的凭证.

  • 如果您使用两个heroku帐户,这是一个完美的答案.工作就像一个魅力,谢谢!或者,您可以将现有的heroku帐户作为协作者添加到新应用中,但这可能没有用,因为您想要分离工作/个人heroku帐户. (2认同)

Ami*_*rge 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帐户的密钥.