监控域名证书到期时间

1.需求

nginx服务器中的域名,在跑的业务域名比较多,需要监控各个域名的证书到期时间,提前做好准备更换证书。
网上有很多的平台监控,但很多都是需要付费的,本次是使用telegram配合做监控提示。

2.nginx服务器上编辑脚本

vim check_ssl.sh

#!/bin/bash
 
#证书位置
ssl_folder='/opt/lucky/nginx/conf/keys/baidu/'
 
#设置定判定剩余时间
day=400

#主机名称
host=`hostname`
 
#tg群組跟机器人
chat_id='@123_gsds'       #等号后面写你的ID,本次这里由于私密问题,是乱输入的
token='bot534543543:AAEaesatawetggfeawtsg223'   #等号后面写你自己的token,本次这里由于私密问题,是乱输入的
 
#tg发送指令
send_tg(){
  echo $1
  curl -g "https://api.telegram.org/$token/sendMessage?text=$1&chat_id=$chat_id"
}
 
 
check_ssl (){
 
    EXP_DAY=`openssl x509 -enddate -noout -in $file | grep "notAfter" | awk -F '=' '{print $2}'`
    NOW_TIME=`date +%s`
    EXP_TIME=`date +%s -d "${EXP_DAY}"`
    
    if [ "${EXP_DAY}" != '' -a ${NOW_TIME} -lt ${EXP_TIME} ]; then
        echo $(((EXP_TIME-NOW_TIME)/(60*60*24)))
    else
        echo "ERROR"
    fi
}
 
 
for file in $(find $ssl_folder -name *.crt)
do
    result=`check_ssl $file`
 
 
    if [ "$result" == 'ERROR' ];then
        # echo '----'
        echo 'SSL 证书过期' $file
        send_tg "$host 服务器的 $file SSL 证书过期"
    else
        if [ $result -lt $day ]; then
            echo "$host 服务器的 $file 过期时间小于 $day 天, 剩 $result 天过期"
            send_tg "$host 服务器的 $file 过期时间小于 $day 天, 剩 $result 天过期"
        else
            echo $result $file
        fi
    fi
 
done

脚本根据你的nginx路径,做一些改动,之后设置定时任务,定时运行这个脚本,即可。

3.验证

监控域名证书到期时间_第1张图片

4.注意

群组频道类型要选择公开
监控域名证书到期时间_第2张图片

你可能感兴趣的:(shell,Nginx,服务器,ssl,运维)