1. 编写SSL证书巡检脚本
cat /hao/batch_check_ssl_expire.sh
#!/bin/bash
# 域名列表文件绝对路径
domains_file="/hao/domains.txt"
#钉钉webhook
webhook_url="https://oapi.dingtalk.com/robot/send?access_token=9999999999999999999999999999999999999999999999999999"
#钉钉推送告警信息
dingding_push(){
curl -H "Content-Type: application/json" \
-d '{
"msgtype": "text",
"text": {
"content": "【重要告警】: 【'"$domain"'】 的SSL证书将在【'"$remaining_days"'】 天内过期。"
}
}' $webhook_url
}
# 检查每个域名的SSL证书
while read -r domain; do
# 获取当前日期的Unix时间戳(秒)
current_timestamp=$(date +%s)
# 使用openssl s_client命令获取证书信息,并通过grep和awk提取到期日期
expires=$(echo | openssl s_client -connect "$domain":443 2>/dev/null | openssl x509 -noout -enddate 2>/dev/null | cut -d'=' -f2)
if [ -z "$expires" ]; then
echo "无法获取SSL证书信息,请检查域名 ($domain) 或网络连接。"
continue
fi
# 将到期日期转换为Unix时间戳
expires_timestamp=$(date -d "$expires" +%s)
# 计算剩余天数
remaining_days=$(( (expires_timestamp - current_timestamp) / 86400 ))
# 将剩余天数信息推送到钉钉告警
if [ $remaining_days -le 10 ]; then
dingding_push
elif [ $remaining_days -le 15 ]; then
dingding_push
else
echo "$domain 的SSL证书有效,距离过期还有$remaining_days 天。"
fi
done < "$domains_file"
2. 创建域名列表文件
cat /hao/domains.txt
test1.google.com
test2.google.com
test3.google.com
test4.google.com
test5.google.com
3. 配置计划任务
[root@localhost ~]# crontab -l
30 09 * * * /bin/bash /hao/batch_check_ssl_expire.sh > /dev/null 2>&1