1Panel证书同步到其他服务器

利用1panel的证书申请成功后,利用执行脚本功能,实现远程SSL证书推送到其他服务器。
✅目前初版已完成,足够自用了。不想再增加其他乱七八糟的功能。


说明:1panel 推送证书到远程主机有两种方法:

  1. 直接上传证书内容到远程主机(推荐)
  2. 先上传证书文件到远程主机,再执行api调用

关键代码(在线仓库地址在文章末尾)

# 构建上传证书的请求数据:
# - type参数:值为paste为远程上传证书内容,需要privateKey和certificate指定证书文本内容。
#            值为local则读取远程主机内的文件,用privateKeyPath和certificatePath指定,证书在远程主机的文件路径
#
UPLOAD_DATA=$(cat <<EOF
{
    "privateKey": "$PRIVATE_KEY_CONTENT",
    "certificate": "$CERTIFICATE_CONTENT",
    "type": "paste",
    "sslID": $SSL_ID,
    "description": "${DESCRIPTION} ${current_time}"
}
EOF
)

# 生成1panel需要的Token:md5(1panel+SECRET+unix_stamp)
TIMESTAMP=$(date +%s);
TOKEN_MD5=$(echo -n "1panel${API_SECRET}${TIMESTAMP}"|md5sum |cut -d" " -f1);

# 发送证书上传请求
UPLOAD_RESPONSE=$(curl -s -X POST "${PANEL_URL}{$API_SSL_UPLOAD}" \
    -H "Content-Type: application/json" \
    -H "1Panel-Token: $TOKEN_MD5" \
    -H "1Panel-Timestamp: $TIMESTAMP" \
    -d "$UPLOAD_DATA")

# 输出上传结果
echo "证书上传响应: $UPLOAD_RESPONSE"

使用方法:

  1. 下载脚本,保存到本地,如/root/sync-1panel-cert.sh,记下路径/root,后面要用到。
  2. 修改参数,一共三个:

    1. PANEL_URL: 1panel访问url(例https://1panel.xxx.cn),不需要加安全入口
    2. API_SECRET:API接口,在1panel系统设置里面开启,建议添加IP白名单并定期更换。
    3. SSL_ID:这个要手动获取,先上传一遍要同步的证书,再开启浏览器开发者工具,点击打开刚上传证书详情,就可以从开发者工具网络选项看到一个数字,就是这个SSL_ID。这个较为麻烦,暂不知道更简单方法。
  3. 利用1panel证书自动续签功能,选择证书推送到本地目录,路径选刚才保存脚本的路径/root/
  4. 勾选申请证书之后执行,下面的脚本内容中填入以下内容,然后确认保存即可。

    chmod +x /root/sync-1panel-cert.sh
    /root/sync-1panel-cert.sh

保存确认后,1panel会自动执行一次,有异常及时反馈我
1panel证书同步脚本设置.jpg

其他
可在运行脚本时,用参数指定证书路径,调用方法:

/root/sync-1panel-cert.sh /path

在线仓库地址:https://github.com/noyboy/1panel/blob/main/sync-1panel-cert.sh
同类脚本:1panel更新证书后同步到pve

THE END

标签: Linux 1panel

本作品采用 知识共享署名-相同方式共享 4.0 国际许可协议 进行许可。


相关文章