拉取部署、github actions 和 ssh 密钥

Pull deploy, github actions and ssh keys

提问人:chilly_maximus 提问时间:1/17/2022 最后编辑:VonCchilly_maximus 更新时间:2/2/2022 访问量:5390

问:

比方说,我想使用 GitHub 操作和拉取策略来设置我的部署过程。

所以我有一个 Ubuntu 服务器,我复制服务器的公钥 ssh 密钥,将其添加到我的 GitHub 帐户,然后我可以从 Ubuntu 服务器克隆,构建并运行应用程序。

这很好,但我觉得这是一个小陷阱。
密钥将添加到帐户,而不是存储库。

如果我离开作为存储库所有者的组织,会发生什么情况?
服务器将失去执行正确 CI 的能力,对吧?

组织所有者可以创建持有 SSH 密钥且永远不会离开组织的帐户,但如果存储库所有权被转移怎么办?
我可能在这里遗漏了一些东西,但为什么不允许将密钥直接添加到存储库,而不是用户帐户?
或者这个选项在那里,我不知何故错过了它?

GitHub github-操作

评论


答:

4赞 VonC 1/17/2022 #1

密钥将添加到帐户中,而不是添加到存储库中。

这就是每个存储库都有部署密钥的原因。

https://docs.github.com/assets/cb-44521/images/add-deploy-key.png

例如,像 webfactory/ssh-agent 这样的 GitHub Action 确实支持 Deploy 密钥。

为了支持在此用例中选择正确的密钥,此操作会扫描密钥注释,并将设置额外的 Git 和 SSH 配置以使工作正常进行。

  • 为存储库(如 或)创建部署密钥时,将该 URL 放入密钥注释中。(提示:尝试 。[email protected]:owner/repo.githttps://github.com/owner/repossh-keygen ... -C "[email protected]:owner/repo.git"
  • 将密钥添加到代理后,此操作将扫描密钥注释。
  • 对于包含此类 URL 的关键注释,将编写使用 .它会将 git 请求重定向到以 https://github.com/owner/repo[email protected]:owner/repo 开头的 URL,以创建虚假的主机名/URL,例如 .url.<base>.insteadof[email protected]...:owner/repo
  • 将生成适用于假主机名的 SSH 配置部分。它会将 SSH 连接映射回 github.com,同时将 SSH 指向包含相应密钥公共部分的文件。这将使 SSH 在连接到 GitHub.com 时使用正确的密钥。

然后,您将获得一个 GitHub Action 配置,如以下示例所示:

name: Deploy
on:
push:
 tags:
   - 'GA*'
# ...
- name: Install SSH Client 🔑
  uses: webfactory/[email protected]
  with:
    ssh-private-key: ${{ secrets.DEPLOY_KEY }}

- name: Deploy 🚀
  uses: JamesIves/[email protected]
  with:
    BASE_BRANCH: master
    BRANCH: gh-pages
    CLEAN: true
    FOLDER: .
    SSH: true
# ...

在命令行中,从 GitHub CLI gh 2.5.0(2022 年 2 月)开始:gh repo deploy_key

gh repo deploy-key add <key-file> [flags]

# generate a passwordless SSH key and add it as a deploy key to a repository
$ ssh-keygen -t ed25519 -C "my description" -N "" -f ~/.ssh/gh-test
$ gh repo deploy-key add ~/.ssh/gh-test.pub

请参阅上下文中的问题 4242