惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

小众软件
小众软件
A
About on SuperTechFans
博客园 - Franky
Engineering at Meta
Engineering at Meta
Recent Announcements
Recent Announcements
云风的 BLOG
云风的 BLOG
B
Blog
Microsoft Security Blog
Microsoft Security Blog
L
LangChain Blog
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
U
Unit 42
Martin Fowler
Martin Fowler
Y
Y Combinator Blog
Stack Overflow Blog
Stack Overflow Blog
博客园 - 叶小钗
Vercel News
Vercel News
Apple Machine Learning Research
Apple Machine Learning Research
The Cloudflare Blog
Last Week in AI
Last Week in AI
腾讯CDC
Microsoft Azure Blog
Microsoft Azure Blog
爱范儿
爱范儿
V
V2EX
G
Google Developers Blog

云野开源志

OpenClaw 升级排坑实录:2026.7.1-2 → 2026.8.1 国内镜像源速配工具,Linux 换源不用愁 Tailscale 非对称路由导致 LAN 设备无法访问同网段 Tailscale 节点 Tailscale 子网路由劫持本地流量排查与修复 Tailscale vs ZeroTier:内网组网选型与实战 排查 Docker Compose PWD 变量导致 Waline 数据库挂载异常 OpenClaw npm 升级踩坑记:从版本冲突到模块丢失 Posts 免责声明 Site-Disclaimers openclaw(moltbot、Clawdbot)常见异常 大模型配置-千问免费版 初始化OpenClaw 安装openclaw记录 大年初一桃花谷 g.sh - Go语言环境管理工具安装脚本 install-cri-docker.sh - cri-dockerd安装脚本 install-docker.sh - Docker Engine快速安装脚本 install-docker2.sh - Docker 交互式安装脚本 install-nginx.sh - Nginx官方源快速安装脚本 install-zerotier.sh - ZeroTier 虚拟网络快速安装脚本 mng.sh - Nginx配置文件合并脚本 OpenSSL.sh - 自签名 SSL 证书生成脚本 SystemInfoMonitor.sh - 系统资源监控告警脚本 UpdateImages.sh - Docker 镜像批量更新脚本 解忧杂货铺 - 云野开源志 为Hugo Next主题添加Umami统计支持 解忧杂货铺 - 栏目声明 Certd - 解决多平台SSL证书管理难题的神器 轻量级网络端口监控工具
CheckSSL.sh - SSL证书到期时间监控脚本
云野开源志 · 2026-01-26 · via 云野开源志

总结摘要

CheckSSL.sh 是一个用于监控网站 SSL 证书到期时间的 Shell 脚本,当证书即将过期时会发送告警通知,帮助管理员及时更新证书,避免服务中断。

脚本功能

CheckSSL.sh 是一个用于批量监控多个网站 SSL 证书到期时间的 Shell 脚本。它通过 OpenSSL工具获取SSL证书的有效期信息,计算剩余有效天数,并在证书即将过期时通过 Bark推送告警通知。

核心特性

  • 批量监控多个域名的 SSL 证书
  • 自动计算证书剩余有效天数
  • 支持自定义告警阈值(默认 7 天)
  • 集成 Bark 推送告警通知
  • 支持 SNI(Server Name Indication)
  • 可灵活扩展其他告警通道(钉钉、企业微信等)

脚本依赖

系统工具依赖

  • openssl:用于获取 SSL 证书信息
  • curl:用于发送 Bark 告警请求
  • bashsh:脚本运行环境

外部服务依赖(可选)

  • Bark 服务:iOS 推送通知服务(如不需要告警可禁用)
    • 服务地址:https://api.day.app/
    • 获取 Bark Key:安装 Bark App 后自动生成

环境变量依赖

.env 文件配置

脚本需要加载同目录下的 .env文件,该文件应包含以下变量:

1
2
# Bark 通知密钥(从 Bark App 获取)
bark_key=xxxxxxxxxx

配置文件位置

  • 优先加载当前工作目录的 .env文件
  • 其次加载脚本所在目录的 .env文件

获取 Bark Key步骤

  1. 在 iOS设备 上安装 Bark App(App Store搜索"Bark")
  2. 打开 App 会自动生成一个唯一的 key
  3. 复制该 key到.env文件中

参考文档Bark 使用教程

内置变量说明

脚本内部定义的变量及其作用:

1
sites=("aliyun.com" "elisky.cn" "github.com")  # 要监控的域名列表

自定义监控站点: 取消脚本中第 18 行的注释,并修改为需要监控的域名:

1
sites=("example.com" "test.com" "api.yourdomain.com")

告警阈值配置

1
2
# 第 35 行附近,修改天数阈值
if [ $days_left -le 7 ]; then  # 改为$days_left -le 30则 30 天前告警

参数用法

本脚本无命令行参数,通过修改脚本内变量和配置文件进行定制:

  • 无参数模式:读取.env文件中的 bark_key,遍历 sites数组中的所有域名进行检查
  • 禁用告警:注释掉脚本中 Bark 相关的 curl命令(见使用方法部分)

使用方法

快速安装与使用

  1. 下载脚本

    1
    2
    3
    4
    5
    
    # 使用主下载地址
    bash <(curl -sL sc.eli1.top) CheckSSL download
    
    # 或使用备用地址
    bash <(curl -sL download.elisky.cn) CheckSSL download
  2. 创建配置文件

    1
    2
    3
    4
    5
    6
    
    # 复制模板文件
    cp .env-template .env
    
    # 编辑.env文件,填入 Bark Key
    vim .env
    # 添加:bark_key=your_bark_key_here
  3. 配置监控站点: 编辑 CheckSSL.sh脚本,修改第 18 行附近的 sites 数组:

    1
    2
    
    # 取消注释并修改为实际域名
    sites=("example.com" "api.example.com" "shop.example.com")
  4. 运行脚本

    1
    2
    3
    4
    5
    
    # 赋予执行权限
    chmod +x CheckSSL.sh
    
    # 执行脚本
    ./CheckSSL.sh

典型使用场景示例

场景 1:手动检查证书状态

1
2
3
4
5
6
# 临时检查几个域名的证书状态
# 编辑脚本,设置 sites 数组
sites=("google.com" "github.com")

# 运行脚本查看输出
./CheckSSL.sh

场景 2:定时监控任务(推荐)

1
2
3
4
5
# 添加到 crontab,每天上午 9 点执行
crontab -e

# 添加以下行
0 9 * * * /path/to/CheckSSL.sh >> /var/log/ssl_check.log 2>&1

场景 3:测试告警通道

1
2
3
4
5
# 临时修改脚本第 35 行,将阈值改为 999 天进行测试
if [ $days_left -le 999 ]; then  # 测试时会触发所有域名的告警

# 运行脚本验证 Bark 是否收到通知
./CheckSSL.sh

场景 4:禁用 Bark 告警

如果不需要 Bark 通知,可以注释掉相关代码:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
# 方法 1:注释掉.env加载部分(脚本第 6-14 行)
# if [[ -f ./.env ]]; then
#     source ./.env
# elif [[ -f $SCRIPT_DIR/.env ]]; then
#     source $SCRIPT_DIR/.env
# else
#     echo ".env file not found!..."
#     exit 1
# fi

# 方法 2:注释掉告警触发部分(脚本第 36-40 行)
# if [ $days_left -le 7 ]; then
#     curl -s https://api.day.app/$bark_key/SSL 监控告警/"$site: 证书在 $days_left 天内过期"?group=jobtest
# else
#     echo "$site: Certificate expires on $formatted_date"
# fi

场景 5:自定义告警阈值

1
2
3
# 修改脚本第 35 行,将 7 天改为 30 天
if [ $days_left -le 30 ]; then  # 提前 30 天告警
    curl -s https://api.day.app/$bark_key/SSL 监控告警/"$site: 证书将在 $days_left 天后过期"

场景 6:扩展其他告警通道

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
# 在脚本中添加钉钉机器人告警
if [ $days_left -le 7 ]; then
    # Bark 告警
    curl -s https://api.day.app/$bark_key/SSL 监控告警/"$site: 证书在 $days_left 天内过期"
    
    # 钉钉机器人告警
    curl 'https://oapi.dingtalk.com/robot/send?access_token=YOUR_TOKEN' \
      -H 'Content-Type: application/json' \
      -d '{
        "msgtype": "text",
        "text": {
            "content": "SSL 证书告警:'"$site"' 的证书将在 '"$days_left"' 天后过期!"
        }
      }'
fi

实际应用场景

  • 多域名证书管理:企业或个人管理多个域名时,批量监控所有 SSL 证书状态
  • 自动化运维监控:集成到运维监控体系,作为 SSL 证书健康检查的一部分
  • 定时巡检任务:通过 cron定时任务实现每日/每周自动检查
  • 紧急告警通知:证书临近过期时立即推送通知,避免服务中断
  • 证书续期提醒:配合自动化续期工具(如 Let’s Encrypt),在自动续期失败时提供人工干预提醒
  • 第三方服务监控:监控依赖的第三方服务(如 API 提供商)的证书状态,提前感知潜在风险

注意事项

Bark 服务配置

  • Bark Key 保密性:不要将包含 Bark Key 的.env文件提交到代码仓库
  • 网络可达性:确保服务器能访问https://api.day.app/
  • 推送频率限制:避免过于频繁的检查触发 Bark 的频率限制

监控准确性

  • SNI 支持:脚本使用-servername参数支持 SNI,适用于虚拟主机环境
  • 端口假设:默认检查 443 端口,如果使用非标准 HTTPS 端口需要修改脚本
  • DNS 解析:确保服务器能正确解析被监控的域名

告警策略

  • 阈值设置建议

    • 7 天:适合有自动化续期流程的环境
    • 15-30 天:适合需要人工介入续期的环境
    • 90 天:Let’s Encrypt证书建议提前 90 天开始尝试续期
  • 避免告警疲劳:合理设置检查频率,建议每天检查 1 次即可

扩展与定制

  • 日志记录:建议将脚本输出重定向到日志文件便于审计

    1
    
    ./CheckSSL.sh >> /var/log/ssl_monitor.log 2>&1
  • 多重告警:可以同时配置多种告警通道(Bark + 钉钉 + 企业微信 + 邮件)

  • 错误处理:脚本缺少对网络异常的处理,建议在关键环境中增加错误重试机制

安全提示

  • 权限控制:确保.env文件的权限设置为仅所有者可读

  • 定期检查:即使有自动化监控,也建议定期手动检查重要域名的证书状态

  • 备份方案:准备备用的监控方案,防止单一监控系统失效