shell脚本监控https证书到期时间,并支持钉钉和企业微信通知
之前的证书监控脚本在我服务器一直正常运行,在22年底的时候给一个客户做证书监控,然后客户提出要求同时支持企业微信和钉钉一起发通知,并希望能在证书快到期之前发通知提醒,所以我对之前那个脚本进行修改后,现在线上正常运行了快一年了.下面我们来看脚本:
cat /root/soft_shell/check_https.sh
#!/bin/bash ################ Version Info ################## # DAte: 2023/2/27 # Author: rocdk890 # Version: 2.0 # Attention: 通过域名获取证书的过期时间 ################################################ # 钉钉机器人access_token DD_TOKEN="https://oapi.dingtalk.com/robot/send?access_token=xxxxxxxxxxxxxxxxxxxxx" # 企业微信机器人key WX_KEY="https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=xxxxxxxxxxxxxxxx" # 存储需要监控的域名文件 file="/root/soft_shell/domain_ssl.info" # 遍历域名文件中的每一个域名 while read line; do # 忽略以 # 开头的注释行 if [[ $line == \#* ]]; then continue fi host=$(echo "${line}" | awk -F ':' '{print $1}') port=$(echo "${line}" | awk -F ':' '{print $2}') # 计算 SSL 证书到期剩余天数 end_time=$(date +%s -d "$(echo | openssl s_client -servername $host -connect $host:$port 2>/dev/null | openssl x509 -noout -dates | grep 'After' | awk -F '=' '{print $2}' | awk -F ' +' '{print $1,$2,$4 }')") now_time=$(date +%s -d "$(date "+%Y-%m-%d %H:%M:%S")") days=$(($(($end_time - $now_time))/(60*60*24))) # 判断是否需要发送消息 if [ $days -eq 30 ] || [ $days -eq 15 ] || ([ $days -le 7 ] && [ $days -gt 0 ]); then # 判断是否已经发送过此消息 if grep -q "$host:$port:$days" /tmp/domain_ssl_alert.log; then continue fi # 发送钉钉和企业微信消息 curl ${DD_TOKEN} -H 'Content-Type: application/json' -X POST --data '{"msgtype":"text","text":{"content":"告警域名: \n'$host' \n\nSSL证书到期时间剩余:'$days' 天\n"}}' curl ${WX_KEY} -H 'Content-Type:application/json' -d '{"msgtype":"text","text":{"content":"告警域名: \n'$host' \n\nSSL证书到期时间剩余:'$days' 天\n"}}' # 记录已发送消息的域名和天数 echo "$host:$port:$days" >> /tmp/domain_ssl_alert.log fi done < "$file"
要监控的域名,这里以我自己的域名为例:
cat /root/soft_shell/domain_ssl.info
blog.slogra.com:443
在crontab里设置每天早上9点35进行检查(因为我9点半上班,所以设置成9点35进行检查的话,这样不会看漏掉消息)
35 9 * * * /bin/bash /root/soft_shell/check_https.sh
好了,最后提醒你们记得提前把钉钉和企业微信的机器人的key准备好.
评论: