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

ssh域名过期,消息推送到企业微信

1.shell脚本

#!/bin/bash# ================= 配置区域 =================
# 企业微信机器人 webhook key
WEBHOOK_KEY="xxxxxx"# 检测的域名列表(一行一个)
DOMAINS=("vip.xxx.com:443""oa.xxxx.com:443"
)# 提前多少天提醒(默认30天)
WARN_DAYS=30# 临时文件(用于存储结果)
TEMP_FILE="/tmp/ssl_check_result_$(date +%s).md"# ================= 函数:获取证书过期时间 =================
get_cert_expiry() {local domain=$1local port=${2:-443}# 使用 openssl 获取证书信息expiry_date=$(echo | openssl s_client -servername "$domain" -connect "$domain:$port" 2>/dev/null | \openssl x509 -noout -enddate 2>/dev/null | \cut -d= -f2)if [ -z "$expiry_date" ]; thenecho "ERROR: 无法获取证书信息"return 1fi# 转换为时间戳expiry_timestamp=$(date -d "$expiry_date" +%s 2>/dev/null)if [ $? -ne 0 ]; thenecho "ERROR: 日期解析失败: $expiry_date"return 1fiecho $expiry_timestamp
}# ================= 函数:发送企业微信消息 =================
send_wechat_msg() {local content="$1"curl -s -X POST "https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=$WEBHOOK_KEY" \-H "Content-Type: application/json" \-d "{\"msgtype\": \"markdown\",\"markdown\": {\"content\": \"$content\"}}"
}# ================= 主程序 =================
echo "# 📅 SSL 证书到期检测报告 $(date +'%Y-%m-%d %H:%M')" > "$TEMP_FILE"
echo "" >> "$TEMP_FILE"
echo "## 检测域名列表:" >> "$TEMP_FILE"
echo "" >> "$TEMP_FILE"WARN_FLAG=0for item in "${DOMAINS[@]}"; doIFS=':' read -r domain port <<< "$item"port=${port:-443}echo "- \`$domain:$port\`" >> "$TEMP_FILE"expiry_ts=$(get_cert_expiry "$domain" "$port")if [[ $? -ne 0 ]] || [[ -z "$expiry_ts" ]]; thenecho "  - ❌ 获取证书失败" >> "$TEMP_FILE"WARN_FLAG=1continuefinow_ts=$(date +%s)remain_days=$(( (expiry_ts - now_ts) / 86400 ))if [ $remain_days -le $WARN_DAYS ] && [ $remain_days -ge 0 ]; thenecho "  - ⚠️ **即将过期:剩余 $remain_days 天**" >> "$TEMP_FILE"WARN_FLAG=1elif [ $remain_days -lt 0 ]; thenecho "  - ❗ **已过期:$(( -remain_days )) 天前**" >> "$TEMP_FILE"WARN_FLAG=1elseecho "  - ✅ 正常:剩余 $remain_days 天" >> "$TEMP_FILE"fi
doneecho "" >> "$TEMP_FILE"
if [ $WARN_FLAG -eq 1 ]; thenecho "> 💡 **请尽快处理即将过期或已过期的证书!**" >> "$TEMP_FILE"
elseecho "> ✅ 所有证书均在安全期内。" >> "$TEMP_FILE"
fi# 读取内容并转义换行符和引号,适配 JSON
CONTENT=$(sed ':a;N;$!ba;s/\n/\\n/g;s/"/\\"/g' "$TEMP_FILE")# 发送消息
send_wechat_msg "$CONTENT"# 清理临时文件
rm -f "$TEMP_FILE"

2.赋予脚本执行权限

chmod +x check_ssl_cert.sh

3.配置定时任务(crontab)

crontab -e# 每天早上10执行
0 10 * * * /bin/bash /home/check_ssl_cert.sh

4.测试运行

手动运行一次测试:

./check_ssl_cert.sh

5.结果

📅 SSL 证书到期检测报告 2025-09-10 10:00## 检测域名列表:- `example.com:443`- ⚠️ **即将过期:剩余 25 天**
- `google.com:443`- ✅ 正常:剩余 89 天
- `github.com:443`- ✅ 正常:剩余 365 天> 💡 **请尽快处理即将过期或已过期的证书!**

6.注意事项

  1. 确保服务器能访问外网和目标域名的 443 端口
  2. 确保安装了 openssl 和 curl
    # Ubuntu/Debian
    sudo apt update && sudo apt install openssl curl -y# CentOS/RHEL
    sudo yum install openssl curl -y
  3. 企业微信机器人 Webhook Key 需要保密,不要提交到 Git
  4. 如需支持中文域名或 SNI,脚本已内置 -servername 参数支持

7.可选增强功能

  • ✅ 添加日志记录到文件
  • ✅ 支持从文件读取域名列表
  • ✅ 支持钉钉、飞书等多平台推送
  • ✅ 支持证书颁发者、签发时间等详细信息

文章转载自:

http://cyZ8kOGO.ppdsL.cn
http://v4rEsdAT.ppdsL.cn
http://ZS92THYB.ppdsL.cn
http://zRshQvF8.ppdsL.cn
http://nDmPY1go.ppdsL.cn
http://tzEdGXun.ppdsL.cn
http://JR47mbt8.ppdsL.cn
http://yLZbH91P.ppdsL.cn
http://4H58iUnS.ppdsL.cn
http://RtYezTvJ.ppdsL.cn
http://FtpoFuwd.ppdsL.cn
http://H0FD5ecl.ppdsL.cn
http://3T5ndNGg.ppdsL.cn
http://vfgiRIdl.ppdsL.cn
http://NnI63Pq4.ppdsL.cn
http://17IKdVbu.ppdsL.cn
http://FZfUk7rg.ppdsL.cn
http://bqcPtoD1.ppdsL.cn
http://OA5HPSB4.ppdsL.cn
http://Pz6MTEWb.ppdsL.cn
http://m1eCg7RJ.ppdsL.cn
http://qsUEUxoK.ppdsL.cn
http://9xOpMp0S.ppdsL.cn
http://RngIxiNy.ppdsL.cn
http://f0Gf7qRA.ppdsL.cn
http://UlUgR4Vb.ppdsL.cn
http://zrPOInLl.ppdsL.cn
http://PArkVcik.ppdsL.cn
http://6orin1Pr.ppdsL.cn
http://1JmQFegW.ppdsL.cn
http://www.dtcms.com/a/376326.html

相关文章:

  • 【Python】爬虫html提取内容基础,bs4
  • zabbix告警推送钉钉
  • Android系统框架知识系列(二十):专题延伸:JVM vs ART/Dalvik - Android运行时演进深度解析
  • 关于在pycharm终端连接服务器
  • VPS、云服务器、独立服务器的区别是什么?新手服务器选择指南
  • 10. 游戏开发中的TCP与UDP
  • 第1章:操作系统和计算机网络
  • 在uniapp/vue项目中全局挂载component
  • 【ubuntu 24.04 LTS】真实实验部署ollama0.11.6+deepseekR1:1.5b+open-webUI
  • [万字长文]AJAX入门-常用请求方法和数据提交、HTTP协议-报文、接口文档、案例实战
  • 基于 Vue3 + VueOffice 的多格式文档预览组件实现(支持 PDF/Word/Excel/PPT)
  • 【Unity UGUI 交互组件——Scrollbar(8)】
  • 报错Failed to set ntp: NTP not supported
  • 零基础学AI大模型之读懂AI大模型
  • 《嵌入式硬件(六):ARM汇编核心内容总结》
  • 力扣刷题笔记-三数之和
  • WPF WriteableBitmap 高性能双缓冲图片显示方案
  • 如何优化WordPress中的图片提升网站性能
  • Word添加图/表题注
  • 十八、从0开始卷出一个新项目之瑞萨RZN2L使用ADC+DMA接收数据流
  • 日志文件-输出宏的实现
  • AI 帮我写单测:pytest 覆盖率提升 40% 的协作日志
  • RL【7-2】:Temporal-difference Learning
  • 50条常用的MySQL命令汇总
  • 宝塔SSL自动续签
  • Nginx SSL/TLS 配置
  • 剧本杀小程序系统开发:开启沉浸式社交娱乐新纪元
  • Nginx SSL 获取 SSL/TLS 证书(仅用于测试)
  • 激光频率梳 3D 轮廓测量 -- 平晶干涉法观察高精度平面度
  • HTTP快速入门