如何将命令与Let's Encrypt证书续期结果关联并自动发邮件
自动化证书续期提醒邮件方案
第一步:编写证书有效期检查脚本
我给你整了个实用的bash脚本,核心就是用openssl提取证书过期日期,和当前日期算差值,判断要不要触发邮件提醒。你把下面的路径、邮箱换成自己的就行:
#!/bin/bash # 替换成你的证书实际路径 CERT_PATH="/etc/ssl/certs/your_domain.crt" # 主机服务商的收件邮箱 SUPPORT_EMAIL="support@your_hostprovider.com" # 你的发件邮箱(后续要确保邮件工具能正常用这个地址发信) FROM_EMAIL="your_email@your_domain.com" # 提取证书过期日期并转成时间戳 EXPIRY_DATE=$(openssl x509 -enddate -noout -in $CERT_PATH | cut -d= -f2) EXPIRY_TIMESTAMP=$(date -d "$EXPIRY_DATE" +%s) # 当前时间戳 CURRENT_TIMESTAMP=$(date +%s) # 计算剩余天数(秒转成天) DAYS_LEFT=$(( ($EXPIRY_TIMESTAMP - $CURRENT_TIMESTAMP) / 86400 )) # 当剩余天数≤7天时,发送提醒邮件 if [ $DAYS_LEFT -le 7 ]; then SUBJECT="紧急:请部署新SSL证书(剩余$DAYS_LEFT天过期)" BODY="您好,我的域名your_domain.com的SSL证书将在$DAYS_LEFT天后过期,请帮忙在后端部署已续期的证书。证书文件路径:$CERT_PATH\n\n谢谢!\n你的名字" # 用mailx发送邮件,不同系统参数可能略有调整,比如部分系统用-r指定发件人 echo -e "$BODY" | mailx -s "$SUBJECT" -r "$FROM_EMAIL" "$SUPPORT_EMAIL" fi
第二步:测试脚本并配置邮件发送
- 给脚本加执行权限:
chmod +x check_cert_expiry.sh - 手动运行脚本测试:
./check_cert_expiry.sh,确认邮件能正常发送。如果发不出邮件,可能需要配置mailx/sendmail的SMTP信息——比如在/etc/mail.rc里添加你的邮箱服务商SMTP服务器、授权码等(比如用QQ邮箱的话,SMTP是smtp.qq.com,需要开启POP3/SMTP并获取授权码)。
第三步:用crontab设置定时自动运行
把脚本加到定时任务,每天跑一次,彻底解放双手:
- 编辑crontab:
crontab -e - 添加一行(比如每天凌晨2点自动执行,同时记录日志方便排查):
0 2 * * * /path/to/your/check_cert_expiry.sh >> /var/log/cert_check.log 2>&1
额外小贴士
- 测试阶段可以把
DAYS_LEFT -le 7改成DAYS_LEFT -le 30,提前验证邮件发送逻辑,没问题再改回7天。 - 定期查看
/var/log/cert_check.log,确保脚本一直正常运行,避免服务器配置变动导致脚本失效。 - 证书续期后,脚本会自动检测到剩余天数增加,不会重复发邮件,直到下次临近过期。
内容的提问来源于stack exchange,提问作者DDiran
相关产品推荐
相关产品推荐

