当前位置: 首页 > news >正文

使用bash脚本检测网站SSL证书是否过期 - sherlock

#!/bin/bash# 加载环境变量
. /etc/profile
. ~/.bash_profile
. /etc/bashrc# 脚本所在目录即脚本名称
script_dir=$( cd "$( dirname "$0"  )" && pwd )
script_name=$(basename ${0})
readFile="${script_dir}/domain_ssl.info"# 检查配置文件是否存在
if [ ! -f "${readFile}" ]; thenecho "错误:配置文件 ${readFile} 不存在"exit 1
figrep -v '^#' ${readFile} | while read line; do# 跳过空行if [[ -z "${line// }" ]]; thencontinuefi# 处理域名和端口if [[ "${line}" == *":"* ]]; then# 包含端口号get_domain=$(echo "${line}" | awk -F ':' '{print $1}')get_port=$(echo "${line}" | awk -F ':' '{print $2}')else# 不包含端口号,使用默认443get_domain=${line}get_port=443fi# 去除域名和端口中的空格get_domain=$(echo "${get_domain}" | tr -d ' ')get_port=$(echo "${get_port}" | tr -d ' ')# 验证端口号是否为数字if ! [[ "${get_port}" =~ ^[0-9]+$ ]]; thenecho "警告:域名 ${get_domain} 的端口 ${get_port} 不是有效数字,使用默认端口443"get_port=443fiecho "正在检查 ${get_domain}:${get_port} 的SSL证书..."# 使用openssl获取域名的证书情况,然后获取其中的到期时间END_TIME=$(echo | openssl s_client -servername ${get_domain} -connect ${get_domain}:${get_port} 2>/dev/null | openssl x509 -noout -dates | grep 'After' | awk -F '=' '{print $2}' | awk -F ' +' '{print $1,$2,$4 }')# 检查是否成功获取到证书信息if [[ -z "${END_TIME}" ]]; thenecho "错误:无法获取 ${get_domain}:${get_port} 的SSL证书信息"# 发送错误通知(钉钉、飞书)curl -s -o /dev/null 'https://oapi.dingtalk.com/robot/send?access_token=xxxx' -H 'Content-Type: application/json' -d '{"msgtype": "text", "text": {"content": "'"${get_domain}:${get_port} SSL证书检查失败,请手动检查"'"}}'curl -s -o /dev/null -X POST -H "Content-Type: application/json" 'https://open.feishu.cn/open-apis/bot/v2/hook/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx' -d '{"msg_type":"text","content":{"text":"'"${get_domain}:${get_port} SSL证书检查失败,请手动检查"'"}}'continuefiEND_TIME1=$(date +%s -d "$END_TIME") # 将日期转化为时间戳NOW_TIME=$(date +%s -d "$(date "+%Y-%m-%d %H:%M:%S")") # 将当前的日期也转化为时间戳RST=$(($(($END_TIME1 - $NOW_TIME))/(60*60*24))) # 到期时间减去目前时间再转化为天数echo "域名:${get_domain}:${get_port} | 证书有效天数剩余:${RST} 天"# 证书过期提醒if [ $RST -lt 10 ]; thenecho "警告:${get_domain}:${get_port} 证书将在 ${RST} 天后过期!"# 钉钉通知curl -s -o /dev/null 'https://oapi.dingtalk.com/robot/send?access_token=xxxx' \-H 'Content-Type: application/json' \-d '{"msgtype": "text", "text": {"content": "'"${get_domain}:${get_port} HTTPS证书有效期少于10天(剩余${RST}天),存在风险,请及时更新证书"'"}}'# 飞书通知curl -s -o /dev/null -X POST \-H "Content-Type: application/json" \'https://open.feishu.cn/open-apis/bot/v2/hook/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx' \-d '{"msg_type":"text","content":{"text":"https://'"${get_domain}:${get_port}"' SSL证书有效期为'"${RST}"'天,请注意及时更新"}}'fi
doneecho "SSL证书检查完成!"
http://www.zskr.cn/news/6606.html

相关文章:

  • Python 2025:低代码开发与自动化运维的新纪元 - 教程
  • 一句话让AI帮你搞营销?火山引擎Data Agent说:这事儿可以的~
  • 网络安全反模式:无效工作生成器的根源与解决方案
  • Excel处理控件Aspose.Cells教程:如何将Excel区域转换为Python列表
  • LOJ #3835. 「IOI2022」千岛 题解
  • Ubuntu取消vim自动对齐
  • 中文医学基准测试题库数据集:28万条标准化JSON格式医师考试题目与临床案例分析,覆盖28个医学专业领域,用于医学AI模型训练、临床决策支持系统开发、医学知识问答系统构建、医学教育辅助工具优化
  • 函数计算的云上计费演进:从请求驱动到价值驱动,助力企业走向 AI 时代
  • Kubernetes概述与部署
  • 使用AI容器镜像部署Qwen大语言模型
  • 作业03
  • vs code运行Java遇到的输入问题
  • 关于数据跨境,你应该了解的合规难题有哪些?
  • 国内开发者如何选择代码管理平台?三大主流工具深度对比
  • 维保信息查询
  • 人工智能学习路线学习资料整理
  • 软件设计师知识点总结(2023)上
  • 【运维自动化-标准运维】各类全局变量使用说明(中)
  • OFDM 自适应功率与比特分配
  • 1380亿条微博全量数据集,可用于自然语言处理、情感分析、舆情分析、推荐系统、用户行为数据、商业智能、人工智能模型训练、中文文本数据、地理位置信息、时间序列分析、JSON格式、机器学习、文本挖掘等
  • 本土化技术平台的崛起:Gitee如何重塑中国开发者生态
  • 研究生化学英文题库数据集:300万条LaTeX格式AI训练资源,覆盖有机化学物理化学无机化学分析化学,用于智能评估系统、个性化学习平台、化学知识图谱构建、自动化工具开发、深度学习模型
  • 多重分形去趋势交叉相关性分析
  • WPF 容器尺寸行为总结
  • django对接drf-spectacular替代swagger
  • 可画
  • Symbol VBRK: Invalid data type u SAP 事务成功新号码获取到 但是提交后提示失败如何处理
  • ollama如何安装使用
  • 手把手教你实现C++高性能内存池,相比 malloc 性能提升7倍!
  • LDPC 码 BP 算法性能研究