如何在Ubuntu系统下使用bash创建并加密GitHub仓库密钥
在Ubuntu bash环境下实现GitHub仓库密钥创建/更新
前置准备
你需要提前安装好如下依赖:
sudo apt update && sudo apt install -y jq python3 python3-pip # 安装Python加密依赖(你已经安装可以跳过) pip3 install pynacl
完整bash实现脚本
#!/bin/bash # 配置部分,请替换为你的实际参数 export MY_ACCESS_TOKEN="你的GitHub个人访问令牌" export REPO_OWNER="仓库所属的用户名/组织名" export REPO_NAME="仓库名称" export SECRET_NAME="目标密钥的名称,比如DEPLOY_KEY" export SECRET_VALUE="需要加密存储的密钥明文" # 步骤1:获取仓库公钥与key_id pubkey_res=$(curl -s \ -H "Authorization: Bearer $MY_ACCESS_TOKEN" \ -H "Accept: application/vnd.github.v3+json" \ "https://api.github.com/repos/$REPO_OWNER/$REPO_NAME/actions/secrets/public-key") export PUBLIC_KEY=$(echo "$pubkey_res" | jq -r '.key') export KEY_ID=$(echo "$pubkey_res" | jq -r '.key_id') # 步骤2:加密密钥内容(兼容所有特殊字符,无需手动转义) ENCRYPTED_VALUE=$(python3 -c " import os from base64 import b64encode from nacl import encoding, public pubkey_obj = public.PublicKey(os.environ['PUBLIC_KEY'].encode('utf-8'), encoding.Base64Encoder()) sealed_box = public.SealedBox(pubkey_obj) encrypted_data = sealed_box.encrypt(os.environ['SECRET_VALUE'].encode('utf-8')) print(b64encode(encrypted_data).decode('utf-8')) ") # 步骤3:调用接口创建或更新密钥 curl -s -X PUT \ -H "Authorization: Bearer $MY_ACCESS_TOKEN" \ -H "Accept: application/vnd.github.v3+json" \ "https://api.github.com/repos/$REPO_OWNER/$REPO_NAME/actions/secrets/$SECRET_NAME" \ -d "{\"encrypted_value\": \"$ENCRYPTED_VALUE\", \"key_id\": \"$KEY_ID\"}"
使用说明
- 替换脚本开头的配置参数为你自己的实际值
- 给脚本添加执行权限:
chmod +x update_github_secret.sh - 运行脚本即可完成密钥的创建或更新
- 加密结果和你之前使用Python脚本生成的结果完全一致,符合GitHub API的要求
内容的提问来源于stack exchange,提问作者GTXBxaKgCANmT9D9
相关产品推荐
相关产品推荐

