如何将 heroku ssh 密钥添加到 known_hosts(以前可以使用)
how to add heroku ssh keys to known_hosts (used to work before)
我有一个 CI 管道,我在其中部署到 Heroku(在 gitlab 上)。我不想使用我的个人 api 密钥,因为这是一个共享存储库。所以我让这个 CI-config 一直工作到几周前:
deploy-heroku:
variables:
GIT_DEPTH: 200
stage: deploy
only:
- master
except:
- schedules
script:
- apk update && apk upgrade && apk add curl bash git openssh-client
- curl https://cli-assets.heroku.com/install.sh | sh
- heroku git:remote -a $HEROKU_APP_NAME --ssh-git
- mkdir -p ~/.ssh
- echo "$SSH_PRIVATE_KEY" | tr -d '\r' > ~/.ssh/id_ed25519
- chmod 700 ~/.ssh/id_ed25519
- eval "$(ssh-agent -s)"
- ssh-add ~/.ssh/id_ed25519
- ssh-keyscan -H 'heroku.com' >> ~/.ssh/known_hosts
- git push -f heroku HEAD:master --no-verify
这完美地工作,并且在日志中:
$ ssh-keyscan -H 'heroku.com' >> ~/.ssh/known_hosts
# heroku.com:22 SSH-2.0-endosome
# heroku.com:22 SSH-2.0-endosome
# heroku.com:22 SSH-2.0-endosome
# heroku.com:22 SSH-2.0-endosome
# heroku.com:22 SSH-2.0-endosome
然而,几个星期以来,这在 ssh-keyscan
:
上失败了
$ ssh-keyscan -H 'heroku.com' >> ~/.ssh/known_hosts
Cleaning up project directory and file based variables
00:01
ERROR: Job failed: exit code 1
所以 ssh-keyscan 似乎不再起作用了。当 运行 ssh-keyscan -H 'heroku.com'
时,它不再给出任何结果(它曾经给出一些结果)。
如何使按键扫描工作(或如何确保 known_hosts
中的按键正确)?
或者,更一般地说:如何在不使用个人 API 密钥的情况下使 heroku 部署工作?
git over ssh 已弃用并从 Heroku 中删除。
这个脚本确实有效:
- apk update && apk upgrade && apk add curl bash git openssh-client
- curl https://cli-assets.heroku.com/install.sh | sh
- git push --no-verify https://heroku:$HEROKU_API_KEY@git.heroku.com/$HEROKU_APP_NAME.git HEAD:master
在这种情况下,--no-verify
是必需的,因为 git 在其中一个钩子中查找 git-lfs
。使用 --no-verify
标志,将跳过此挂钩。
可以在本地生成HEROKU_API_KEY
,当你登录到heroku并生成一个long-living密钥时:
$ heroku login
heroku: Press any key to open up the browser to login or q to exit:
Opening browser to https://cli-auth.heroku.com/auth/cli/browser/89f5...?requestor=SFMyN...
Logging in... done
Logged in as ...
$ heroku authorizations:create
Creating OAuth Authorization... done
Client: <none>
ID: ...
Description: Long-lived user authorization
Scope: global
Token: <HEROKU_API_KEY>
Updated at: Tue Apr 12 2022 17:34:15 GMT+0200 (Central European Summer Time) (less than a minute ago)
从令牌字段中获取 api 密钥。 (您可以通过 ID heroku authorizations
查看所有 tokens/keys)
在您的存储库中添加 HEROKU_API_KEY
和 HEROKU_APP_NAME
作为受保护的变量。
我有一个 CI 管道,我在其中部署到 Heroku(在 gitlab 上)。我不想使用我的个人 api 密钥,因为这是一个共享存储库。所以我让这个 CI-config 一直工作到几周前:
deploy-heroku:
variables:
GIT_DEPTH: 200
stage: deploy
only:
- master
except:
- schedules
script:
- apk update && apk upgrade && apk add curl bash git openssh-client
- curl https://cli-assets.heroku.com/install.sh | sh
- heroku git:remote -a $HEROKU_APP_NAME --ssh-git
- mkdir -p ~/.ssh
- echo "$SSH_PRIVATE_KEY" | tr -d '\r' > ~/.ssh/id_ed25519
- chmod 700 ~/.ssh/id_ed25519
- eval "$(ssh-agent -s)"
- ssh-add ~/.ssh/id_ed25519
- ssh-keyscan -H 'heroku.com' >> ~/.ssh/known_hosts
- git push -f heroku HEAD:master --no-verify
这完美地工作,并且在日志中:
$ ssh-keyscan -H 'heroku.com' >> ~/.ssh/known_hosts
# heroku.com:22 SSH-2.0-endosome
# heroku.com:22 SSH-2.0-endosome
# heroku.com:22 SSH-2.0-endosome
# heroku.com:22 SSH-2.0-endosome
# heroku.com:22 SSH-2.0-endosome
然而,几个星期以来,这在 ssh-keyscan
:
$ ssh-keyscan -H 'heroku.com' >> ~/.ssh/known_hosts
Cleaning up project directory and file based variables
00:01
ERROR: Job failed: exit code 1
所以 ssh-keyscan 似乎不再起作用了。当 运行 ssh-keyscan -H 'heroku.com'
时,它不再给出任何结果(它曾经给出一些结果)。
如何使按键扫描工作(或如何确保 known_hosts
中的按键正确)?
或者,更一般地说:如何在不使用个人 API 密钥的情况下使 heroku 部署工作?
git over ssh 已弃用并从 Heroku 中删除。
这个脚本确实有效:
- apk update && apk upgrade && apk add curl bash git openssh-client
- curl https://cli-assets.heroku.com/install.sh | sh
- git push --no-verify https://heroku:$HEROKU_API_KEY@git.heroku.com/$HEROKU_APP_NAME.git HEAD:master
在这种情况下,--no-verify
是必需的,因为 git 在其中一个钩子中查找 git-lfs
。使用 --no-verify
标志,将跳过此挂钩。
可以在本地生成HEROKU_API_KEY
,当你登录到heroku并生成一个long-living密钥时:
$ heroku login
heroku: Press any key to open up the browser to login or q to exit:
Opening browser to https://cli-auth.heroku.com/auth/cli/browser/89f5...?requestor=SFMyN...
Logging in... done
Logged in as ...
$ heroku authorizations:create
Creating OAuth Authorization... done
Client: <none>
ID: ...
Description: Long-lived user authorization
Scope: global
Token: <HEROKU_API_KEY>
Updated at: Tue Apr 12 2022 17:34:15 GMT+0200 (Central European Summer Time) (less than a minute ago)
从令牌字段中获取 api 密钥。 (您可以通过 ID heroku authorizations
查看所有 tokens/keys)
在您的存储库中添加 HEROKU_API_KEY
和 HEROKU_APP_NAME
作为受保护的变量。