前置准备
sudo apt install zip
sudo apt install curl
建立证书及脚本及执行
mkdir /etc/ssl/zscd /etc/ssl/zs
vim /etc/ssl/zs/ssl_update.sh
chmod 777 /etc/ssl/zs/ssl_update.sh
./ssl_update.sh
添加自动执行任务
crontab -e
如提示未知命令,则安装cron
安装:apt-get install cron 启动:service cron start
编辑定时任务
0 0 1 * * /etc/ssl/zs/ssl_update.sh
如果你要保存所做的修改,按下Ctrl+O。
想要退出,按下Ctrl+X。
如果你退出前没有保存所做的修改,它会提示你是否要保存;如果不要,请按N,反之,则按Y;然后它会让你确认要保存的文件名,确认或修改后按Enter即可。
查看自动执行任务
crontab -l
想要退出,按下Ctrl+X。
如果你退出前没有保存所做的修改,它会提示你是否要保存;如果不要,请按N,反之,则按Y;然后它会让你确认要保存的文件名,确认或修改后按Enter即可。
crontab -l
以下是自动更新脚本的具体实现,
根据接口文档,可以编写满足需求的bash文件,实现自动部署功能。 主要参数说明:
API获取地址 API接口
ssl_update.sh 自定义脚本内容
ORDER_ID:证书ID TYPE:证书ID类型。建议auto。 API_TOKEN:接口凭证,在后台获取。 API_USER:账户名。注册的邮箱或者手机号。
#!/usr/bin/env bash
export PATH=$PATH:/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin
# 参数配置 开始
ORDER_ID='*****'
TYPE='auto'
API_TOKEN='**************'
API_USER='**************'
FILE_CERT='/etc/ssl/zs/fullchain.crt'
FILE_CERT_KEY='/etc/ssl/zs/private.pem'
COMAND_RELOAD='nginx -s reload'
# 参数配置 结束
# 以下内容根据需求修改
# 证书到期前13天内才会更新
isexpire=`openssl x509 -in ${FILE_CERT} -noout -enddate -checkend 9123200`
if echo "${isexpire}" | grep " not " ; then
echo "Certificate will not expire."
exit 1
fi
API_URL='https://api.osfipin.com/letsencrypt/api'
URL_ORDER_DOWN="${API_URL}/order/down"
HEADER_AUTHOR="Authorization: Bearer ${API_TOKEN}:${API_USER}"
ZIP_FILE="${ORDER_ID}.$RANDOM"
curl ${URL_ORDER_DOWN} -H "${HEADER_AUTHOR}" -G -d "id=${ORDER_ID}" -d "type=${TYPE}" -o ${ZIP_FILE}.zip
if [ ! -s "${ZIP_FILE}.zip" ]; then
echo "download error."
exit 1
fi
size=`du -b ${ZIP_FILE}.zip | awk '{print $1}'`
if [[ ${size} -lt 500 ]]; then
echo "download file error."
cat ${ZIP_FILE}.zip
unlink ${ZIP_FILE}.zip
exit 1
fi
# 解压 移动文件
mkdir -p ${ZIP_FILE}
unzip ${ZIP_FILE}.zip -d ${ZIP_FILE}
/bin/cp ${ZIP_FILE}/fullchain.crt ${FILE_CERT}
/bin/cp ${ZIP_FILE}/private.pem ${FILE_CERT_KEY}
# 删除 打完收工
unlink ${ZIP_FILE}.zip
rm -rf ${ZIP_FILE}
`${COMAND_RELOAD}`
证书设置为 自动重申(启用自动验证,重新申请后,证书ID会保持不变,需要账户类型为VIP)
设置定时任务:
crontab -e 创建定时任务 crontab -l 查看配置文件
0 0 1 1-12/3 * root /etc/ssl/zs/ssl_update.sh “从1月到12月,每3个月的每月1日00:00执行./etc/apache2/ssl/ssl.sh文件。”
0 0 1 * * /etc/ssl/zs/ssl_update.sh “每月的1日00:00 执行./etc/apache2/ssl/ssl.sh文件。”