自动登录 Heroku 命令行界面



我正在开发一个bash脚本来自动克隆开发虚拟机中的一些项目和另一个任务,但我们在Heroku中有一个项目,并且存储库在其中。在我的.sh文件中,我有:

> heroku login

这个输入凭据的提示,我阅读了二进制文件和文档中包含的"帮助"指南,但我找不到任何自动插入用户名和密码的内容,我想要这样的东西:

> heroku login -u someUser -p mySecurePassword

存在任何类似方式吗?

Heroku CLI 仅使用您的用户名和密码来检索您的 API 密钥,该密钥存储在您的~/.netrc文件中(在 Windows 上$HOME_netrc)。

您可以手动检索 API 密钥并将其添加到~/.netrc文件中:

  1. 登录 Heroku 网页界面
  2. 导航到"帐户设置"页面
  3. 向下滚动到API 密钥部分,然后单击显示按钮
  4. 复制您的 API 密钥
  5. 打开您的~/.netrc文件,或使用您喜欢的文本编辑器创建它
  6. 添加以下内容:

    machine api.heroku.com
    login <your-email@address>
    password <your-api-key>
    machine git.heroku.com
    login <your-email@address>
    password <your-api-key>
    

    <your-email@address>替换为在 Heroku 注册的电子邮件地址,<your-api-key>替换为您从 Heroku 复制的 API 密钥。

这应该手动完成heroku login自动执行的操作。但是,我不建议这样做。跑步heroku login更容易做同样的事情,犯错的机会更少。

如果决定在计算机或帐户之间复制~/.netrc文件,则应注意两个主要注意事项:

  • 此文件由许多其他程序使用;请注意仅复制所需的配置节。
  • 您的 API 密钥提供对帐户的完全编程访问权限。您应该像保护密码一样强烈地保护它。

如果您打算使用除heroku login以外的任何机制登录 Heroku,请非常小心。

您可以生成未过期的 OAuth 令牌,然后通过环境变量将其传递给 CLI。如果您需要从调度程序无限期地运行 Heroku CLI 命令,并且不希望登录过期,这将非常有用。这样做(这些不是实际的令牌和ID,顺便说一句):

$ heroku authorizations:create
Creating OAuth Authorization... done
Client:      <none>
ID:          80fad839-876b-4ea0-a41e-6a9a2fb0cf97
Description: Long-lived user authorization
Scope:       global
Token:       ddf4a0e5-9294-4c5f-8820-b51c52fce4f9
Updated at:  Fri Aug 02 2019 21:26:09 GMT+0100 (British Summer Time) (less than a minute ago)

从该授权中获取令牌(而不是ID)并将其传递给您的 CLI:

$ HEROKU_API_KEY='ddf4a0e5-9294-4c5f-8820-b51c52fce4f9' heroku run ls --app my-app
Running ls on ⬢ my-app... up, run.2962 (Hobby)
<some file names>
$

顺便说一下,这也解决了当您在 Heroku 帐户上启用了 MFA 但您的计算机没有 Web 浏览器时如何使用 Heroku CLI 的问题,例如,如果您正在通过 SSH 处理 EC2 机器:

$ heroku run ls --app my-app
heroku: Press any key to open up the browser to login or q to exit:
›   Error: quit
$ HEROKU_API_KEY='ddf4a0e5-9299-4c5f-8820-b51c52fce4f9' heroku run ls --app my-app
Running ls on ⬢ my-app... up, run.5029 (Hobby)
<some file names>
$

编辑:对于Windows机器

运行heroku authorizations:create后,复制"令牌",然后运行以下命令:

set HEROKU_API_KEY=ddf4a0e5-9299-4c5f-8820-b51c52fce4f9
heroku run ls --app my-app

如果你的目标只是获取源代码,你可以使用一个简单的 git 客户端。你只需要api 密钥

获取 api 密钥的步骤

  • 登录 Heroku 网页界面
  • 导航到"帐户设置"页面
  • 向下滚动到 API 密钥部分,然后单击显示按钮
  • 复制您的 API 密钥

使用 git 下载源代码

将此网址模板用于 git 克隆

https://my_user:my_password@git.heroku.com/name_of_your_app.git

就我而言,用户价值是我没有的电子邮件。

Example : 
if mail is **duke@gmail.com**
user for heroku auth will be **duke**

最后,只需像任何其他 git 存储库一样克隆它:

git clone https://duke:my_password@git.heroku.com/name_of_your_app.git

我同意Heroku现在应该已经提供了一种使用其更高级别 CLI 工具执行此操作的方法。

你可以避免极端的解决方案(你应该,就像Chris在他的回答中提到的那样),只需使用curl和Heroku API。Heroku允许您使用您的API令牌(可通过Heroku仪表板上的用户设置/个人资料页面获得)。

然后,您可以使用 API 通过他们的命令行工具实现您想要执行的任何操作。

例如,如果我想获取应用程序的所有配置变量,我会编写一个脚本,该脚本执行以下操作:

-H "Accept: application/vnd.heroku+json; version=3" 
-H "Authorization: Bearer YOUR_TOKEN```
If *YOUR_APP_NAME* had only one config variable called *my_var* the response of the above call would be 
{ 
"my_var": some_value
}
I've found using this all the time in CI tools that need access to *Heroku* information / resources.

相关内容

  • 没有找到相关文章

最新更新