如何通过GitHub Actions为仓库自动添加工作流生成的deploy key
实现方案
可以通过调用GitHub官方REST API完成工作流内自动添加Deploy Key的操作,具体操作流程如下:
前置准备
- 生成一个具备
repo全权限的个人访问令牌(PAT),GitHub Actions默认提供的GITHUB_TOKEN没有修改仓库部署密钥配置的权限,无法直接使用 - 将生成的PAT存入当前仓库的Secrets中,命名为
REPO_ADMIN_TOKEN
工作流修改说明
你现有的工作流已经完成了SSH密钥对的生成,仅需要在密钥生成步骤后新增调用API添加Deploy Key的步骤即可,读取生成的id_rsa.pub公钥内容作为API请求参数。
注意:如果没有特殊需求,建议删除密钥生成步骤中git add、git commit相关逻辑,避免将私钥直接提交到仓库引发权限泄露风险。
完整修改后的工作流代码
on: # 仅在main分支推送时触发工作流 push: branches: [ main ] # 支持手动从Actions页面触发工作流 workflow_dispatch: jobs: build: runs-on: ubuntu-latest if: github.event.repository.name != 'testar-deploy-key' steps: - uses: actions/checkout@v2 - name: 生成Deploy Key密钥对 run: | ssh-keygen -m PEM -t rsa -b 4096 -C "mail@mail.com" -o -f id_rsa -N "" git config --local user.email "action@github.com" git config --local user.name "GitHub Action" # 若不需要提交密钥到仓库,可删除下方三行代码 git add . git commit -m "Generate SSH" - name: 自动添加Deploy Key到仓库 run: | PUBLIC_KEY=$(cat id_rsa.pub) curl -L \ -X POST \ -H "Accept: application/vnd.github+json" \ -H "Authorization: Bearer ${{ secrets.REPO_ADMIN_TOKEN }}" \ -H "X-GitHub-Api-Version: 2022-11-28" \ https://api.github.com/repos/${{ github.repository }}/keys \ -d '{"title":"Action自动生成部署密钥","key":"'"$PUBLIC_KEY"'","read_only":true}' - name: 推送变更到仓库 uses: ad-m/github-push-action@master with: branch: main github_token: ${{ secrets.GITHUB_TOKEN }}
注意事项
- 重复添加相同内容的公钥会触发API报错,可在调用添加接口前先查询仓库现有Deploy Key列表,判断无重复后再执行添加操作
- 若需要Deploy Key具备仓库写入权限,将API请求参数中的
read_only改为false即可 - 生成的私钥请妥善保管,不要直接提交到公开可访问的仓库
内容的提问来源于stack exchange,提问作者harriseppanen
相关产品推荐
相关产品推荐

