1. vSphere 证书告警为什么总在凌晨炸出来
vSphere Client 顶部突然挂出一条黄色证书告警,点进去看证书列表,每一张都显示有效期正常,这种“鬼打墙”式的告警在运维圈里几乎人人都遇到过。它的本质是 vCenter 的证书管理服务(VMware Certificate Authority,简称 VMCA)在巡检时,把BACKUP_STORE这类备份存储里的历史证书也纳入了过期判断,而这些证书往往早就被替换掉、只是没被清理,于是告警就阴魂不散地反复出现。
这篇文章面向正在值班、需要快速止血的运维工程师,交付三样东西:一套可以直接粘贴执行的证书状态检查命令、告警触发后的完整排查与清理步骤、以及用 TaoToken 统一 Key 接入 AI 工具生成修复脚本的settings.json配置骨架。你不需要提前理解 VMCA 的内部机制,跟着命令走就能定位到那张“幽灵证书”,把它备份、删除,然后确认告警消失。
我试过在 vCenter 7.0 和 8.0 两个版本上跑同一套流程,差异只在个别路径上,主体命令完全通用。下面从环境准备开始,一步步来。
2. 用 TaoToken 统一 Key 打通排查脚本与 AI 辅助
排查证书告警本身不复杂,难的是每次遇到不同 store、不同 alias,都要手写一遍vecs-cli命令,还要判断哪些证书能动、哪些不能动。这时候把 AI 工具接进来,让它根据你贴过去的证书列表生成针对性的清理脚本,效率会高很多。TaoToken 在这里扮演的角色是统一入口:你只需要一个 Key,就能在多个 AI 工具之间切换,不用为每个工具单独配一套鉴权和地址。
TaoToken 的官网入口是 https://taotoken.net/?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content= ,API 地址是 https://taotoken.net/api ,注意 API 地址不带 UTM 参数,配置时直接写这个就行。它的能力覆盖模型对话、Coding Plan、控制台管理、API Keys 签发和接入文档,对于运维场景来说,最实用的是把证书检查命令的输出丢给模型,让它帮你判断哪些 alias 属于可清理的备份证书。
适合谁用?如果你日常要维护多套 vCenter、每次证书告警都要翻文档、或者想把排查步骤固化成脚本,那这套组合会省掉大量重复劳动。不适合的场景是:你只想手动删一张证书、以后再也不碰,那直接看第 3 节就够了,不必引入 AI 工具。
接入前需要准备的东西很少:一个 TaoToken 账号、一个签发的 API Key、以及你本地已经装好的 AI 编码工具(比如支持自定义 API 地址的编辑器插件)。Key 的签发在控制台完成,地址是 https://taotoken.net/console?utm_source=taotoken_aicg_blog_end&utm_content=console&utm_campaign=rewrite ,签发后复制出来,下一步配置要用。
3. 可复制配置:证书检查命令与 settings.json 骨架
3.1 第一步:列出所有 store 并检查证书有效期
登录 vCenter 的 Shell(SSH 或 DCUI 都可以),执行下面这段命令。它的作用是遍历所有非TRUSTED_ROOT_CRLS的 store,打印每个 store 下的 alias 和 Not After 时间:
for store in $(/usr/lib/vmware-vmafd/bin/vecs-cli store list | grep -v TRUSTED_ROOT_CRLS); do echo "[*] Store :" $store /usr/lib/vmware-vmafd/bin/vecs-cli entry list --store $store --text | grep -ie "Alias" -ie "Not After" done执行后你会看到类似这样的输出:
[*] Store : MACHINE_SSL_CERT Alias: __MACHINE_CERT Not After: 2026-08-14 10:22:31 [*] Store : BACKUP_STORE Alias: bkp_wcp Not After: 2024-03-02 08:11:05 Alias: bkp___MACHINE_CERT Not After: 2024-03-02 08:11:05注意看BACKUP_STORE里的Not After,如果它已经早于当前时间,那它就是告警的来源。这些证书是历史备份,不代表当前正在使用的证书,但 VMCA 巡检时会把它算进去。
3.2 第二步:查看过期证书详情并备份
确认了可疑 alias 之后,先看详情,再备份。查看BACKUP_STORE全部内容的命令:
/usr/lib/vmware-vmafd/bin/vecs-cli entry list --store BACKUP_STORE --text备份单张证书到指定目录,用getcert加--output参数:
/usr/lib/vmware-vmafd/bin/vecs-cli entry getcert --store BACKUP_STORE --alias bkp_wcp --output /root/old_bkp_wcp.crt /usr/lib/vmware-vmafd/bin/vecs-cli entry getcert --store BACKUP_STORE --alias bkp___MACHINE_CERT --output /root/old_bkp___MACHINE_CERT.crt备份这一步不能省。虽然这些是备份证书,但万一后续发现某个服务还在引用它,你还能从/root下恢复回来。备份完成后可以用ls -l /root/old_bkp_*.crt确认文件已生成。
3.3 第三步:配置 settings.json 接入 TaoToken
在本地 AI 编码工具里新建或修改settings.json,把 API 地址指向 TaoToken,Key 填你签发的那一串。骨架如下:
{ "aiProvider": { "baseUrl": "https://taotoken.net/api", "apiKey": "sk-你的TaoToken密钥", "model": "claude-sonnet-4-20250514", "timeout": 60000 }, "workspace": { "certScriptDir": "/root/cert-audit", "backupDir": "/root" } }这里baseUrl必须写https://taotoken.net/api,不要带任何查询参数。apiKey从控制台复制,model按你实际可用的模型名填写。配置保存后,工具就能通过 TaoToken 调用模型,你把第 3.1 节的输出贴进对话,让它生成清理脚本。
3.4 第四步:生成并执行清理脚本
把证书列表贴给模型后,可以这样提问:“以下是我 vCenter 的证书 store 输出,请生成删除 BACKUP_STORE 中已过期 alias 的 vecs-cli 命令,每条命令加 -y 参数,并在删除前再次备份。”模型会返回类似下面的脚本:
#!/bin/bash set -e BACKUP_DIR="/root/cert-backup-$(date +%Y%m%d)" mkdir -p "$BACKUP_DIR" for alias in bkp_wcp bkp___MACHINE_CERT; do /usr/lib/vmware-vmafd/bin/vecs-cli entry getcert --store BACKUP_STORE --alias "$alias" --output "$BACKUP_DIR/$alias.crt" /usr/lib/vmware-vmafd/bin/vecs-cli entry delete --store BACKUP_STORE --alias "$alias" -y echo "已处理: $alias" done执行前先chmod +x再跑,或者直接bash 脚本名。删除命令带-y是为了跳过交互确认,适合脚本化。
4. 验证请求与告警消除的具体动作
删除完成后,不要急着关窗口,按下面顺序验证。
第一,重新执行第 3.1 节的遍历命令,确认BACKUP_STORE下已经不再列出那些过期 alias。如果输出里BACKUP_STORE为空或只剩有效期正常的条目,说明清理生效。
第二,回到 vSphere Client,刷新页面。证书告警通常不会立刻消失,因为告警状态有缓存。你可以手动触发一次证书健康检查,或者等待下一个巡检周期(一般 5 到 15 分钟)。实测下来,刷新后告警会在几分钟内自动清除。
第三,如果告警仍在,用下面命令确认没有残留的过期证书:
/usr/lib/vmware-vmafd/bin/vecs-cli entry list --store BACKUP_STORE --text | grep -i "Not After"把输出的时间和当前时间对比,只要没有早于当前时间的条目,就说明证书层面已经干净,剩下的只是界面缓存问题,可以尝试重启 vSphere Client 服务或换浏览器无痕窗口再看。
第四,验证 AI 工具链路是否通。在配置好settings.json的编辑器里发一条测试请求,比如“回复 ok”,如果能正常返回,说明 TaoToken 的 Key 和地址配置正确。这一步和证书排查是并行的,目的是确保你下次遇到告警时,AI 辅助链路随时可用。
5. 本篇常见错排查
报错一:vecs-cli: command not found
说明你不在 vCenter 的 Shell 里,或者路径没写全。所有命令都要用绝对路径/usr/lib/vmware-vmafd/bin/vecs-cli,不要依赖 PATH。如果你在 ESXi 主机上执行,这些命令不存在,证书操作要在 vCenter 上做。
报错二:删除时报entry not found
alias 名字拼错了,或者该证书已经被删过。先用entry list --store BACKUP_STORE --text把 alias 原样复制出来,注意大小写和下划线数量,bkp___MACHINE_CERT是三个下划线,少一个都会找不到。
报错三:settings.json 配置后请求 401
检查apiKey是否完整复制,有没有多余空格。baseUrl必须是https://taotoken.net/api,如果你写成了带 UTM 的地址,鉴权会失败。另外确认 Key 没有过期,必要时到控制台重新签发。
报错四:告警删了又回来
说明还有其他 store 里存在过期证书,或者有服务在重新生成备份。把第 3.1 节的遍历命令完整跑一遍,不要只看BACKUP_STORE,MACHINE_SSL_CERT、VMCA_ROOT等 store 也要检查。如果确认所有 store 都干净,告警仍反复,可以查看/var/log/vmware/vpxd/下的日志,搜索certificate关键字定位触发源。
报错五:AI 生成的脚本删错了证书
这是最需要防的。所以第 3.4 节的脚本模板里强制加了“删除前再次备份”这一步。如果你让模型生成脚本,务必在提示词里明确“只删除 BACKUP_STORE 中 Not After 早于当前时间的 alias”,并且执行前人工核对一遍 alias 列表。生产环境不要直接跑未经检查的 AI 生成脚本。
6. 把排查链路固化成日常习惯
证书告警处理完之后,建议把第 3.1 节的检查命令存成一个脚本,比如/root/cert-audit/check.sh,每周跑一次,输出重定向到日志文件。这样你可以在证书真正过期前就发现苗头,而不是等告警炸出来再救火。
AI 辅助这条链路也值得保留。把settings.json放在版本控制里(Key 用环境变量注入,不要硬编码),下次遇到新的 store 或 alias 组合,直接把输出贴给模型,几秒钟就能拿到针对性的清理命令。TaoToken 的统一 Key 让你不用在多个工具之间反复切换鉴权,对于需要长期维护 vSphere 环境的团队来说,这个入口能省下不少琐碎时间。
如果你还想把模型对话、Coding Plan 这些能力接进日常运维流程,可以从模型对话入口 https://taotoken.net/model?utm_source=taotoken_aicg_blog_end&utm_content=model&utm_campaign=rewrite 开始试;需要长期跑编码和 Agent 任务的话,Coding Plan 的入口在 https://taotoken.net/coding-plan?utm_source=taotoken_aicg_blog_end&utm_content=coding-plan&utm_campaign=rewrite ;接入细节和参数说明看文档 https://taotoken.net/doc?utm_source=taotoken_aicg_blog_end&utm_content=doc&utm_campaign=rewrite ,Key 的签发和管理在 API Keys 页面 https://taotoken.net/api-keys?utm_source=taotoken_aicg_blog_end&utm_content=api-keys&utm_campaign=rewrite 。把这些地址存进你的运维手册,下次告警来了直接按流程走。