DEBUG.WIKI
ZgoCloud:多地区部署,按需选节点;日本、美国、香港、德国
雨云;给项目一台云服务器
RackNerd;$21.99/年 · 1GB KVM

Certbot 报 unrecognized arguments --dns-cloudflare-credentials:插件装到了另一套环境

Certbot 不认识 DNS 插件参数时,先检查实际入口是否加载插件。区分系统安装、虚拟环境、旧 certbot-auto 与容器,再安排保留证书状态的安装或迁移。

执行 DNS 验证命令,Certbot 还没发起验证就报 unrecognized arguments: --dns-cloudflare-credentials,同时可能不认识 --dns-cloudflare-propagation-seconds。已经用 pip 或源码安装过插件,也不能证明正在执行的 Certbot 加载到了它。

先检查命令入口和它能列出的插件。旧脚本 certbot-auto、系统安装、虚拟环境、Snap 和容器都有自己的安装边界;把插件装进一处,不会让所有入口都自动获得这些参数。

这类错误发生在参数解析阶段。Cloudflare API 权限不足、TXT 传播慢或 ACME 服务拒绝,需要在插件已经被识别后另查,不能先通过增加传播等待时间解决未识别参数。

让版本、插件和实际命令来自同一个入口

以下是交互终端的只读检查示例:

command -v certbot
certbot --version
certbot plugins

检查插件列表中是否出现预期的 dns-cloudflare 认证器。若调用的是绝对路径,则对那个路径执行版本与 plugins 检查,不要用 PATH 中另一份程序的输出代替。

例如,项目确实使用 /opt/certbot/bin/certbot 时,应检查:

/opt/certbot/bin/certbot --version
/opt/certbot/bin/certbot plugins

路径只是示例,文件不存在不代表插件丢失,可能只是你的安装位置不同。定时任务、systemd 和使用 sudo 的入口也要单独核对,它们不一定继承当前终端的 PATH。终端能列出插件、自动续期仍报相同错误时,重点查自动任务实际执行的程序。

如果插件已经列出,继续核对实际命令与支持的参数拼写。选项前的 -- 应是普通半角连字符,凭据参数后还需提供文件路径;从富文本复制的符号或遗漏值,可能产生另一类解析错误,不要把所有参数错误都归到安装环境。

按现有安装方式补齐插件

dns-cloudflare 不是默认安装的插件。虚拟环境方式应把 Certbot 与兼容的插件装进同一个虚拟环境,并由该环境的 Certbot 执行。用系统 Python 跑一次 setup.py install,不能替另一份隔离的 Certbot 安装插件。

发行版包、Snap 等方式应采用对应安装方式支持的 DNS 插件流程,避免混用系统 pip 和包管理器。当前 Certbot 的 pip 安装只在虚拟环境中按尽力支持处理,不能为此直接覆盖受系统管理的 Python 环境。

容器方式也需选用包含 DNS 插件的镜像。普通 certbot/certbot 镜像与 certbot/dns-cloudflare 的用途不同;宿主机安装的 Python 包不会自动进入容器。更换镜像还需保留 Certbot 的配置状态,并让容器能读取原来规划的凭据文件,不能只换镜像名字就忽略续期关系。

安装或更新前保存当前入口、插件版本和续期配置,在隔离环境确认兼容性。只新增插件不应顺便重建所有证书或更换现有证书名称。若需要回退,恢复对应安装及任务入口,避免让两套客户端同时续期同一份状态。

仍在使用 certbot-auto 时,安排迁移

certbot-auto 已不受支持。旧方式中,脚本管理的 Certbot 环境与手工向系统 Python 安装插件的环境可能分离,继续反复安装同一个源码包不会自动修正入口。

迁移前保留完整 Certbot 配置、证书文件、账户及 renewal 配置,同时核对 pre/post/deploy hooks 和服务实际加载路径。不要按网上某一条清理命令直接删除旧环境或证书目录。

新的受支持入口和对应插件可用后,再替换原自动任务,确认只保留一套计划中的续期执行。停止旧计划与启用新计划之间需要协调,避免重复申请,或留下一段无人续期的空档。

参数识别后,再验证 DNS 与续期

成功的第一步是同一实际入口能列出插件,原命令不再被参数解析拒绝。接着才检查 Cloudflare 凭据文件、授权区域及 DNS 验证结果。凭据应只授权所需区域,文件不向其他用户开放,也不要把内容放进命令参数或日志。

Certbot 会记录凭据路径用于续期,但不会替你保存文件内容;自动执行用户或容器以后仍需能读到该路径。凭据和安装环境验证正确后,在受控测试环境完成验证与续期检查,再按原证书部署流程验收。

测试续期也可能运行已配置的服务 hooks,应先核对副作用。插件识别成功不等于 DNS 验证成功,证书签发成功也不等于 Web 服务已经加载新证书,各阶段按实际结果继续检查。