每日定时执行shell命令续签证书 api调用的方式
每个域名都有一个对应的index 如果只需要续签一个证书,就把下面的index改成对应的值 就可以了
#!/bin/bash
# 获取时间戳(修复时间戳拼接可能的格式问题,兼容不同系统)
cur_timestamp=$(($(date +%s)*1000 + $(date +%N)/1000000))
# 宝塔密钥
api_sk='Id8yl9CpNjLEX0Hajj02KCtoTu21lMbQ'
# 密钥MD5加密(修复echo可能的换行问题,加 -e 确保无多余字符)
key=$(echo -n "$api_sk" | md5sum | cut -d" " -f1)
# 生成token
request_token=$(echo -n "${cur_timestamp}${key}" | md5sum | cut -d" " -f1)
# 构造请求参数,修正curl语法:-X POST 放在正确位置,-k 单独写
curl -i -k -X POST -d "request_token=$request_token&request_time=$cur_timestamp" https://74222.221:端口/acme?action=renew_cert
https://74.11111:端口/acme?action=renew_cert
shell执行出错,改一下,
post请求加入表单数据index=c3ec48b4de2d8fcf8b0dcd7a28098430
设置证书
# 发送设置SSL请求(保存HTTP状态码)
log "发送SetSSL请求到: ${SET_SSL_ACTION}"
set_ssl_response=$(curl -s -k -X POST \
-H "Content-Type: application/x-www-form-urlencoded" \
-d "${set_ssl_post_data}" \
"${SET_SSL_ACTION}" \
--max-time 30 \
--retry 2 \
--retry-delay 3 \
-w "%{http_code}" -o /tmp/set_ssl_body.txt)
# 读取响应体
set_ssl_body=$(cat /tmp/set_ssl_body.txt)
rm -f /tmp/set_ssl_body.txt
# 检查HTTP状态码和响应内容
if [[ "${set_ssl_response}" -eq 200 ]]; then
log "SSL证书设置请求成功(HTTP 200)!响应内容:${set_ssl_body}"
elif [[ "${set_ssl_response}" -eq 404 ]]; then
log "错误:SetSSL接口返回404 Not Found!请检查以下内容:"
log " 1. 接口URL是否正确:当前为 ${SET_SSL_ACTION}"
log " 2. action参数大小写是否正确(如SetSSL → setssl 或 SetSsl)"
log " 3. 路径是否正确(如/site → /sites 或 /api/site)"
log " 4. 该接口是否需要额外的认证参数(如token、签名)"
exit 1
else
log "错误:SSL证书设置请求失败!HTTP状态码:${set_ssl_response},响应内容:${set_ssl_body}"
exit 1
fi
log "证书续期并生效操作全部完成!"
exit 0