You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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\"}"

使用说明

  1. 替换脚本开头的配置参数为你自己的实际值
  2. 给脚本添加执行权限:chmod +x update_github_secret.sh
  3. 运行脚本即可完成密钥的创建或更新
  4. 加密结果和你之前使用Python脚本生成的结果完全一致,符合GitHub API的要求

内容的提问来源于stack exchange,提问作者GTXBxaKgCANmT9D9

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 16:09:03