最近碰到域名的证书过期导致域名用不了造成的事故,所以写了一个检测域名证书过期时间的脚本,来防止类似的事情发生。也分享给大家,希望对大家有用。
- 本次是通过三个文件来实现的,一个是检测脚本,一个是存储域名的文件,一个是报警邮件脚本
- 检测脚本check.sh
#!/bin/bash
for yuming in `cat /root/right.txt` #读取存储了需要监测的域名的文件
do
END_TIME=$(echo | openssl s_client -servername $yuming -connect $yuming:443 2>/dev/null | openssl x509 -noout -dates |grep 'After'| awk -F '=' '{print $2}'| awk -F ' +' '{print $1,$2,$4 }' )
#使用openssl获取域名的证书情况,然后获取其中的到期时间
END_TIME1=$(date +%s -d "$END_TIME") #将日期转化为时间戳
NOW_TIME=$(date +%s -d "$(date | awk -F ' +' '{print $2,$3,$6}')") #将目前的日期也转化为时间戳
a=$(($(($END_TIME1-$NOW_TIME))/(60*60*24))) 到期时间减去目前时间再转化为天数
if [ $a -lt 14 ]; #当到期时间小于14天时发邮件告警
then
python mail.py 目标邮箱名 "服务器证书过期提醒" "域名证书 $yuming 剩下 $a 天过期,请迅速更新"
fi
done
- 告警邮件
mail.py
#!/usr/bin/env python
#-*- coding: UTF-8 -*-
import os,sys
reload(sys)
sys.setdefaultencoding('utf8')
import getopt
import smtplib
from email.MIMEText import MIMEText
from email.MIMEMultipart import MIMEMultipart
from subprocess import *
def sendqqmail(username,password,mailfrom,mailto,subject,content):
gserver = 'smtp.163.com' #163邮箱的就填163,qq的就填qq
gport = 25
try:
msg = MIMEText(unicode(content).encode('utf-8'))
msg['from'] = mailfrom
msg['to'] = mailfrom
msg['Reply-To'] = mailfrom
msg['Subject'] = subject
smtp = smtplib.SMTP(gserver, gport)
smtp.set_debuglevel(0)
smtp.ehlo()
smtp.login(username,password)
smtp.sendmail(mailfrom, mailto, msg.as_string())
smtp.close()
except Exception,err:
print "Send mail failed. Error: %s" % err
def main():
to=sys.argv[1]
subject=sys.argv[2]
content=sys.argv[3]
sendqqmail('用来发邮件的邮箱','邮箱授权码','用来发邮件的邮箱',to,subject,content)
if __name__ == "__main__":
main()
#####脚本使用说明######
#1. 首先定义好脚本中的邮箱账号和授权码
#2. 脚本执行命令为:python mail.py 目标邮箱 "邮件主题" "邮件内容"