证书申请端
前置条件:需要一个git 仓库(公开仓库就行,有加密控制)
#!/bin/bash
set -e
# ==================== 配置区域 ====================
PASSWORD="0000" # 替换为您生成的加密密码
GIT_REPO="https://你的git token(ghp开头)@github.com/git用户名/仓库地址.git" # 您的公共仓库地址
CERT_DIR="/root/cert" # 证书目录
# ==================================================
WORK_DIR="/tmp/cert_push_work"
rm -rf "$WORK_DIR" && mkdir -p "$WORK_DIR"
cd "$WORK_DIR"
# 1. 克隆仓库
echo "正在克隆仓库..."
git clone "$GIT_REPO" repo_dir || mkdir repo_dir
cd repo_dir
# 2. 配置 Git 基础信息并确保存在本地 main 分支
git config user.name "1Panel Cert Auto Bot"
git config user.email "bot@1panel.fit"
git checkout -b main 2>/dev/null || git checkout main 2>/dev/null || true
# 3. 将当前目录下的所有 1Panel 证书文件打包并高强度加密 (切换为兼容 CLI 的 aes-256-cbc)
echo "正在打包并加密证书..."
tar -czf - -C "$CERT_DIR" . | openssl enc -aes-256-cbc -salt -pbkdf2 -pass "pass:$PASSWORD" -out encrypted_certs.tar.gz.enc
# 4. 提交并强制推送到 GitHub
git add encrypted_certs.tar.gz.enc
git commit -m "Automated update encrypted certs: $(date +'%Y-%m-%d %H:%M:%S')" || true
echo "正在推送到 GitHub..."
git push -u origin main -f
# 5. 清理临时目录
rm -rf "$WORK_DIR"
# 可以添加serve酱通知(可选)
NOTICE_URL="https://6069.push.ft07.com/send/key.send"
curl -G "$NOTICE_URL" \
--data-urlencode "title=证书文件申请成功~" \
--data-urlencode "desp=哈哈"
echo "🎉 证书加密并强推至公共仓库成功!"其他服务器获取证书
#!/bin/bash
set -e
# 自动注册crontab(每月1号凌晨2点运行)
SCRIPT_PATH=$(cd "$(dirname "$0")"; pwd)/$(basename "$0") CRON_JOB="0 2 1 * * /bin/bash $SCRIPT_PATH >> /var/log/update_cert.log 2>&1" # 读取现有任务(允许失败),过滤旧任务,追加新任务,最后写入
((crontab -l 2>/dev/null || true) | grep -v -F "$SCRIPT_PATH" || true; echo "$CRON_JOB") | crontab -
echo "✅ 自动注册定时任务成功!"
# ==================== 配置区域 ====================
PASSWORD="0000" # 替换为您生成的加密密码
GIT_REPO="https://github.com/git用户名/仓库地址.git" # 您的公共仓库地址。无需token
TARGET_DIR="/root/ssl" # 解密后的证书存放本地哪个目录
# ==================================================
WORK_DIR="/tmp/cert_pull_work"
rm -rf "$WORK_DIR" && mkdir -p "$WORK_DIR"
mkdir -p "$TARGET_DIR"
# 1. 免鉴权拉取公共仓库的 main 分支
echo "正在从公共仓库下载证书..."
git clone --depth 1 -b main "$GIT_REPO" "$WORK_DIR/repo"
# 2. 解密并解压证书到目标目录 (使用 aes-256-cbc 解密)
if [ -f "$WORK_DIR/repo/encrypted_certs.tar.gz.enc" ]; then
echo "正在解密证书..."
openssl enc -d -aes-256-cbc -pbkdf2 -pass "pass:$PASSWORD" -in "$WORK_DIR/repo/encrypted_certs.tar.gz.enc" | tar -xzf - -C "$TARGET_DIR"
echo "🎉 证书下载并解密成功,已保存至: $TARGET_DIR"
else
echo "❌ 错误:未在仓库中找到加密的证书文件!"
exit 1
fi
# 3. 清理临时目录
rm -rf "$WORK_DIR"
# ==================================================
# 3️⃣ 自定义脚本区域(在此下方编写任意服务的重载逻辑)
# ==================================================
echo "开始触发本地服务重载..."
if [ "$(docker ps -q -f name=nginx)" ]; then
docker kill -s HUP nginx
echo "Docker Nginx 已成功无缝重载"
fi
# 可以添加serve酱通知(可选)
NOTICE_URL="https://6069.push.ft07.com/send/key.send"
curl -G "$NOTICE_URL" \
--data-urlencode "title=服务器证书文件更新成功~" \
--data-urlencode "desp=nginx已重启"
echo "所有服务重载动作完成!"