多个Heroku账户

95

我在电脑上使用多个Heroku账户时遇到了问题。

之前,我通过切换heroku gem的账户来很好地解决了这个问题。但现在(即使我生成了新的SSH密钥),它也不起作用。

当我执行git push heroku master时,它只会显示:

my@email.com未被授权访问my_app_name

有人能给我一些建议吗?我该如何解决这个问题?


ssh yourid@server -v 给出了什么信息? - Adam Dymitruk
"权限被拒绝(公钥)"。 - Erik
哦,有一个注意事项...电子邮件“my@email.com”与Heroku帐户电子邮件不同...所以似乎存在某种混淆导致问题。 - Erik
将私钥和公钥复制到您的git/.ssh/目录下。这对我有效! - Dmitri Algazin
14个回答

164

您需要确保使用了正确的ssh密钥。

做法(也是heroku账号插件提示您的)是在~/.ssh/config中添加一个部分。例如,对于我的工作heroku账户,在我的ssh配置文件中有以下内容:

Host heroku.work
  HostName heroku.com
  IdentityFile ~/.ssh/id_heroku_work_rsa
  IdentitiesOnly yes

现在,这一点非常重要,你需要确保你的 git 远程配置使用的是同样的主机名。在此例中,它是heroku.work。如果你只使用单个帐户使用 Heroku,则通常会是 heroku.com。

因此,你需要编辑 git 远程配置(可以在你机器上的 repo 的 .git/config 文件中完成此操作)。将文件更改为以下内容:

 [remote "heroku"]
   url = git@heroku.work:<appname>.git

请注意使用 heroku.work 而不是 heroku.com,并将 <appname> 替换为您在 heroku 上的应用程序名称(也称为您的存储库名称)。


1
谢谢,这正是我从Heroku仪表板创建我的生产应用所需要的。 - Bachet
1
git@heroku.work...并不是一个终端节点。我该如何将其作为推送的终端节点?--啊,你需要安装heroku-accounts插件。 - jmstone617
1
@jmstone 对.ssh/config的更改使得heroku.work解析到heroku.com - bantic
是的,这是我那边的另一个问题,现在已经全部解决了。谢谢! - jmstone617
我已将此页面加入书签。每当我在向 Heroku 推送代码时遇到问题,我阅读这篇答案并意识到需要做什么。 - septerr
"只使用身份验证是我的转机!回答很棒。" - Overbryd

36

这个工具最大的问题是它生成未加密的SSH密钥。 - Wolfram Arnold
自己手动创建密钥,这个问题就解决了。这个插头非常适合! - Chris Hough

8
您需要在项目中被接受为协作者,即使您不是该项目的所有者。
它的工作方式如下(使用git):
1. 项目所有者进入heroku控制台。 2. 项目所有者添加协作者的电子邮件地址(使用协作者注册的电子邮件地址)。 3. 协作者在其账户中设置公共安全密钥(如果尚未设置)。 4. 协作者将其他项目添加并设置为另一个远程仓库。
这就是全部内容;当在其他应用程序上部署时,只需在其他远程仓库上推送即可。

谢谢!我花了几个小时来尝试解决这个问题。甚至在 Stack Overflow 和其他网站上尝试了所有不同的方法。在 Heroku 上将相同的电子邮件添加到两个项目中绝对是最简单的解决方案。 - B Seven
我花了很长时间设置身份文件并尝试各种技巧来使多个密钥起作用,但这个答案是迄今为止最简单的方法。将您的原始帐户添加为协作者并使用相同的密钥即可。容易。 - Peter Nixey

7

Heroku插件https://github.com/ddollar/heroku-accounts已被弃用。现在,Heroku维护自己的插件,地址为https://github.com/heroku/heroku-accounts。不幸的是,它似乎不能按项目存储应该使用哪个帐户,所以您需要运行

$ heroku accounts:set account_name

每次想要使用Heroku命令行工具时,需要执行以下步骤。
对于有bash shell访问权限的用户,可以采用以下快速解决方案:创建一个本地bin目录(在Rails应用程序中已经存在),并在其中创建bin/heroku文件。文件内容如下:
#!/bin/bash
/usr/bin/heroku accounts:set account_name
/usr/bin/heroku $*

(根据需要替换 "project_name") 然后运行

$ chmod +x bin/heroku

然后你可以运行

$ bin/heroku run console

它将自动为您使用正确的 Heroku 帐户。更好的方法是将 ./bin 添加到您的路径中,这样您只需运行:

$ heroku run console


这段代码的前七行已经足够让我到达目标,但如果您在账户上启用了2FA,您需要记住需要生成一个API密钥并将其用作您的密码。https://dev59.com/s1EG5IYBdhLWcg3wUKCU#68228325 - Ruben Murray

6

我想补充一些关于heroku-accounts插件的内容...这个例子假设你已经有一个名为heroku.work的Heroku账户,并且你正在添加一个新的账户heroku.personal。

它还描述了如何将应用程序从一个账户移动到另一个账户,例如,如果你达到了25个应用程序的最大限制,并且正在创建一个新的账户,想要将一些副业项目和实验性应用程序从主账户中移出。

  1. 您可能需要使用插件来创建您的旧帐户和新帐户,例如,如果您一开始就有一个帐户,您不能只添加一个新的heroku.personal,您需要创建heroku.work来替换旧帐户。
  2. 您需要重新分配您的旧应用程序到您的heroku.work。
  3. 如果您正在移动应用程序,请在使用heroku共享命令转移应用程序之后才将应用程序分配给heroku.personal(使用 heroku accounts:set personal ),如https://devcenter.heroku.com/articles/transferring-apps所述。

因此,您可能需要执行以下步骤:

  1. 安装heroku-account插件
  2. 前往heroku.com并创建新账户(如果您还没有第二个账户)
  3. 运行heroku accounts:add work --auto创建一个新的heroku.work账户以替换旧的默认账户(所以使用一直在使用的相同凭据)。您还需要将新密钥上传到heroku:heroku keys:add ~/.ssh/identity.heroku.work.pub
  4. 运行heroku accounts:add personal --auto创建一个新的heroku.personal账户(例如,使用新凭据为新的heroku账户)。您还需要将新密钥上传到heroku:heroku keys:add ~/.ssh/identity.heroku.personal.pub
  5. 对于每个应用程序,请进入项目根目录,然后运行heroku accounts:set work(这只是设置git使用您的heroku.work,即(在本示例中)一直使用的相同heroku账户,现在称为heroku.work。
  6. 如果您想将应用程序从heroku.work移动到heroku.personal,则需要:(a) 使用heroku sharing:add <new owner email>将新的heroku账户添加为协作者 (b) 在本地目录中,使用heroku accounts:set personal将应用程序切换到heroku.personal (c) 使用heroku sharing:transfer <new owner email>将应用程序从旧账户转移到新账户,然后 (d) 使用heroku sharing:remove <old owner email>删除旧电子邮件地址协作者(如果您想这样做)

请注意,我提供的Heroku链接指出,移动具有任何付费资源的应用程序有特殊要求。通常情况下,先删除付费资源,然后稍后再添加,或者让支持团队来处理。


4

安装 Heroku-accounts 插件并进行配置!

安装

 heroku plugins:install heroku-accounts

使用

添加账户:

$ heroku accounts:add personal
  Enter your Heroku credentials.
  Email: david@heroku.com
  Password: ******

列出账户:

要列出账户:

$ heroku accounts
  * personal
    work

切换到另一个帐户:

heroku accounts:set personal

查找当前账户:

$ heroku accounts:current
  personal

删除帐户:

$ heroku accounts:remove personal
  Account removed: personal

将其设置为您的 Heroku 工作账户并推送更改。


2

我开始使用heroku-accounts插件,但后来意识到我的朋友只需要将我添加为他的heroku账户的协作者就可以了。


如果您拥有两个账户的密码,请点赞此内容。 - benathon

1
为了让我在Git和Heroku控制台上都能使用,我需要按照bantic的指示创建ssh配置文件,但我还需要在.git配置文件中创建两个远程连接。
[remote "origin"]
  url = git@heroku.work:pacific-rock-4904.git
  fetch = +refs/heads/*:refs/remotes/heroku/*
[remote "heroku"]
  url = git@heroku.com:pacific-rock-4904.git
    fetch = +refs/heads/*:refs/remotes/heroku/*

1
然后推送到哪里?Heroku 还是 origin? - jmstone617

1
我使用了nano .git/config,然后将远程“heroku”的url值替换为heroku.com > apps > settings > Reveal config vars > Heroku Git URL。

1
这个问题困扰我一段时间了,但我一直没有找到满意的解决方案。最终我找到了一个。
(仅适用于OS X的答案。)
你可以创建新用户。前往“系统偏好设置”->“用户与群组”->“添加用户或组”按钮。你可以为不同的Heroku帐户创建几个用户,我只是将它们命名为user1、user2等。
然后前往“系统偏好设置”->“共享”->“远程登录”->“允许访问:所有用户”
此时,你可以进入终端并执行以下操作:
$ ssh user1@localhost

然后您可以做这样的事情:
$ heroku login
$ heroku keys:add

这看起来很完美,但是是否有可能让不同的ssh用户访问相同的文件夹和文件? - Fellow Stranger

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接