证书申请端

前置条件:需要一个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 "所有服务重载动作完成!"