在主机选的运维实战中,很多站点因为 SSL 证书过期导致 502 错误,甚至被浏览器拦截,损失惨重。人工去记几十个域名的到期时间不现实,利用 n8n 搭建一个 AI Agent 自动化工作流是更聪明的做法。这套方案不仅能自动检测 VPS 上的证书有效期,还能利用 AI 生成友好的报警信息,通过 Telegram 或邮件推送到手机,彻底解决证书过期导致的服务中断问题。

n8n 部署与 AI Agent 自动化工作流准备
n8n 是一个开源的工作流自动化工具,非常适合在 VPS 上运行各种定时任务。相比于写复杂的 Python 脚本,用 n8n 搭建 AI Agent 自动化流程更直观,且后期维护成本极低。我们需要先准备一台安装了 Docker 的 VPS。
Docker 快速安装 n8n
直接用 Docker 部署 n8n 最省心,数据也能持久化保存。执行以下命令拉取镜像并启动服务:
mkdir -p ~/n8n_data
docker run -d \
–name n8n \
-p 5678:5678 \
-e N8N_BASIC_AUTH_ACTIVE=true \
-e N8N_BASIC_AUTH_USER=admin \
-e N8N_BASIC_AUTH_PASSWORD=your_strong_password \
-v ~/n8n_data:/home/node/.n8n \
n8nio/n8n
启动成功后,访问 `http://你的服务器IP:5678`,输入账号密码进入后台。建议配置 Nginx 反向代理并开启 HTTPS 访问 n8n 后台,防止配置泄露。
构建 SSL 证书监控工作流
进入 n8n 界面后,新建一个 Workflow。我们的逻辑很简单:每天定时检查 -> 用 OpenSSL 获取证书信息 -> 计算剩余天数 -> 如果少于阈值 -> AI Agent 生成报警 -> 发送通知。
定时触发与 OpenSSL 命令检查
首先添加一个 `Schedule Trigger` 节点,设置 Cron 表达式,例如每天早上 8 点检查一次:`0 8 * * *`。
接着添加 `Execute Command` 节点。这是监控的核心,我们直接利用系统自带的 OpenSSL 命令来检查远程或本地证书。不要依赖第三方 API,自己查最稳。
echo | openssl s_client -servername google.com -connect google.com:443 2>/dev/null | openssl x509 -noout -enddate
这条命令会输出类似 `notAfter=May 27 08:14:03 2025 GMT` 的字符串。
日期解析与有效期计算
OpenSSL 输出的是文本,我们需要把它转换成天数。添加一个 `Code` 节点,输入以下 JavaScript 代码来处理数据:
javascript
// 获取上一步命令的输出
const certDate = $input.first().json.stdout;
// 提取日期字符串并转换为时间戳
const dateStr = certDate.split('=')[1];
const expiryDate = new Date(dateStr);
const now = new Date();
// 计算剩余天数
const diffTime = Math.abs(expiryDate – now);
const diffDays = Math.ceil(diffTime / (1000 * 60 * 60 * 24));
return {
json: {
domain: "google.com", // 实际场景中可从上一级传入
expiryDate: expiryDate.toISOString(),
daysLeft: diffDays
}
};
接入 AI Agent 智能生成报警
这里体现 AI Agent 的价值。如果只是发“还有 3 天过期”,太生硬。我们接入一个 `OpenAI` 或 `HTTP Request`(调用本地 Ollama/DeepSeek)节点,让 AI 根据剩余天数生成不同语气的报警文案。
在 AI Agent 节点的 Prompt 中这样写:
“你是一个运维助手。检测到域名 {{ $json.domain }} 的 SSL 证书将在 {{ $json.daysLeft }} 天后过期。请生成一条简短、紧急的中文提醒消息发送给管理员。如果剩余天数少于 7 天,请使用感叹号和加粗语气。”
配置 Telegram 或邮件通知
最后添加 `Telegram` 或 `Send Email` 节点。将 AI Agent 生成的消息填入 Content 字段。
如果是 Telegram,你需要先创建一个 Bot 并获取 Token,然后获取你的 Chat ID。在 `IF` 节点中设置判断条件:`daysLeft <= 30`。只有满足条件时,才触发后续的 AI 生成和发送动作,避免平时骚扰。
老鸟叮嘱
1.不要用 root 跑 n8n:Docker 容器内虽然不是 root,但映射目录权限要注意,避免宿主机被提权。
2.时区是个大坑:n8n 默认时区可能与服务器不一致,计算天数时最好在代码里强制使用 UTC 或服务器本地时区统一处理,否则报警时间会错乱。
3.命令超时设置:`Execute Command` 节点默认超时时间较短,如果网络慢,SSL 握手可能超时导致报错,建议把超时时间调整为 10 秒以上。
4.证书链问题:某些老旧配置的证书可能只返回了叶子证书,OpenSSL 命令依然能读到时间,但如果遇到自签名根证书不受信任的情况,命令可能会报错,建议在 n8n 里加一个 `Error Trigger` 捕获“命令执行失败”的情况,这也属于故障报警。
常见问题
1. 除了 OpenSSL,还有其他检查方式吗?
可以用 `curl -vI https://域名` 2>&1 | grep "expire date",但 OpenSSL 输出更规范,解析起来更不容易出错。
2. AI Agent 必须用 OpenAI 吗?
不是,n8n 支持 LangChain 节点,可以接入本地部署的 Ollama (如 Llama 3) 或 DeepSeek API,完全免费且数据不出服务器。
3. 如果我有几百个域名怎么办?
不要在 Workflow 里复制几百个节点。建议在 n8n 中使用一个外部文件(如 Google Sheets 或 MySQL)存储域名列表,用 `Split In Batches` 节点循环处理,效率更高。
4. 证书续期后报警会停吗?
只要续期成功,剩余天数会变大,不再满足 `daysLeft <= 30` 的条件,自然就不会触发报警了。
这套 n8n 结合 AI Agent 的方案,把枯燥的证书巡检变成了智能化的运维动作。配置一次,一劳永逸,再也不怕半夜爬起来续证书了。
转载请注明出处:https://www.zhujixuan.com/jishujiaocheng/10195.html 商家投稿邮箱:zhujixuanblog@qq.com
