为了维护方便用openvpn搭建了几个V**服务器,没想到时间太长,证书过期了导致没法登陆。
为了避免类似情况,特地写个脚本监测证书到期时间,如果快到期了就通过钉钉告警。
1. 钉钉告警脚本
前面曾经分享过一个监测分布式存储ceph状态并在非监控状态时报警的脚本,我们这里把它变成一个函数,方便其他脚本调用。
脚本:sendDing.sh
#!/usr/bin/env bash
MobileNumber="1xxxxxxxxxx"
TOKEN="456dxxx2aba9d75bfd8f3cac41dkjfwefjeccc9ebd598378xwdwfdgg"
TEXT="测试"
toDD () {
PHONE=$1
URL="https://oapi.dingtalk.com/robot/send?access_token=$2"
DING="curl -H \"Content-Type: application/json\" -X POST --data '{\"msgtype\": \"text\", \"text\": {\"content\": \"$3 done!\"}, \"at\": {\"atMobiles\": [${PHONE}], \"isAtAll\": false}}' ${URL}"
eval $DING
}
toDD $MobileNumber $TOKEN $TEXT替换手机号码和钉钉令牌测试运行,钉钉上应该可以接受到“测试”,以后其他脚本调用脚本sendDing.sh的函数toDD,后面跟上三个参数(手机号码,钉钉令牌,发送文本)就行了。
2. 监测证书到期时间脚本
为了方便调用,监测语句也用函数
CheckDate () {
caEnd=`openssl x509 -in $1 -noout -enddate | cut -d"=" -f2`
epochCa=`date +%s -d "$caEnd"`
epochNow=`date +%s`
seconds_to_expire=`expr $epochCa - $epochNow`
days_to_expire=`expr $seconds_to_expire / 86400`
echo $days_to_expire
}这个函数会返回被测试的证书剩余的到期天数。
3. 合并处理
最后在证书监测脚本里面调用钉钉告警
一般来说证书都不止一个,所以用for循环逐一监测处理。
#!/usr/bin/env bash
DIR="/path/to/ovpnconfg/"
MobileNumber="1xxxxxxxxxx"
TOKEN="456dxxx2aba9d75bfd8f3cac41dkjfwefjeccc9ebd598378xwdwfdgg"
#通过钉钉发送证书名和到期天数
SendtoDB () {
caDname=`dirname $1`
caBname=`basename $caDname`
TXT="$caBname'到期天数小于'$2"
#调用sendDing.sh
source /path/to/sendDing.sh
toDD $MobileNumber $TOKEN $TXT
}
#循环调用CheckDate,检测所有证书,到期天数小于30天就用钉钉告警
checkExec () {
for CA in `find $1 -name ca.crt`
do
T=`CheckDate $CA`
if [[ $T -lt 30 ]]; then
SendtoDB $CA $T
fi
done
}
checkExec $DIR最后用crontab设置定时任务,每天运行一次即可。