python3下检查ssl证书过期时间并邮件通知

欢迎关注我的微信公众号:「阿拉平平」

安装模块

# ssl模块
pip install pyopenssl

# 邮件模块
pip install yagmail

域名文件

# cat /data/scripts/ssl_check/domain.txt

www.baidu.com 百度
www.sohu.com 搜狐

脚本代码

#!/usr/bin/env python3
# -*- coding:utf-8 -*-

from urllib3.contrib import pyopenssl as reqs
from datetime import datetime
import yagmail


# 读取域名文件
def get_domain_list():
    obj_list = []
    with open('/data/scripts/ssl_check/domain.txt') as f:
        for i in f:
            obj_list.append({'domain': i.split()[0], 'tag': i.split()[1]})
    return obj_list

# 调用openssl,获取过期时间
def get_expire_time(url):
    x509 = reqs.OpenSSL.crypto.load_certificate(reqs.OpenSSL.crypto.FILETYPE_PEM, reqs.ssl.get_server_certificate((url, 443)))
    return datetime.strptime(x509.get_notAfter().decode()[0:-1], '%Y%m%d%H%M%S')

# 发送邮件
def send_mail(expire_list):
    user = '[email protected]'
    password = 'your-password'
    # qq邮箱
    host = 'smtp.exmail.qq.com'
    to = '[email protected]'
    subject = 'ssl证书过期告警'
    d = ''
    for i in expire_list:
        d += '''\
  
    ''' + str(i['domain']) + '''
    ''' + str(i['remain']) + '''
    ''' + str(i['tag']) + '''
  
'''
    html = '''\

'''+ d +'''
域名 剩余天数 所属项目
''' # 去除邮件中多余换行 html = html.replace("\n", "") yag = yagmail.SMTP(user = user, password = password, host = host) yag.send(to = to, subject = subject, contents = html) if __name__ == '__main__': check_days = 15 domain_list = get_domain_list() for i in domain_list: remain_days = (get_expire_time(i['domain']) - datetime.now()).days i['remain'] = remain_days expire_domain_list = [i for i in domain_list if i['remain'] <= check_days] if (len(expire_domain_list) != 0): send_mail(expire_domain_list)

注意:

  • send_mail函数中要修改邮箱信息。
  • 可按照实际情况修改check_days的大小。

定时任务

# crontab -e

0 2 * * 0 python3 /data/scripts/ssl_check/check.py

这里我设置每周执行脚本一次,可按照实际情况自行设置。


写在后面

  • 脚本使用pyopenssl时有部分参考了这篇文章:
    https://www.itnotebooks.com/?p=768
  • yagmail是一个非常好用的发送邮件模块。我编写脚本时发现一个问题:发送html格式的内容会带来多余的空行,所以需要额外处理下。附上模块的github地址:https://github.com/kootenpv/yagmail

你可能感兴趣的:(python3下检查ssl证书过期时间并邮件通知)