多站点统一批量申请SSL证书宝塔脚本

如果你的宝塔面板上挂了十几个甚至更多网站,每三个月手动申请一次 Let‘s Encrypt 证书,重复劳动不说,还容易漏掉某个站点。
这时候,一套“多站点统一批量申请SSL证书宝塔脚本”就能帮你一次搞定所有站点。
本文按照零基础可操作的方式,从准备条件、脚本执行到排错验证,一步一步讲清楚。

适用场景与准备条件

这个方案适用于所有站点都在同一台服务器、宝塔面板已安装并正常运行的环境。
在动手之前,确认以下几点:

  • 宝塔面板已登录,并且所有网站已经添加成功、域名已解析到服务器 IP。
  • 服务器能够正常访问外网(申请证书需要验证域名)。
  • 你有一个能执行 Shell 命令的 SSH 工具(如 Xshell、Putty 或宝塔的终端功能)。
  • 了解自己的宝塔面板版本(本文基于 7.x 版本,向下兼容)。

编写批量申请脚本

宝塔面板自身提供了 Let‘s Encrypt 免费证书的单个申请功能,但要想批量执行,就需要借助 acme.sh 脚本 或宝塔官方的 API 接口
这里推荐 acme.sh,因为它稳定且支持通配符证书,关键是能写循环自动处理多个域名。

第一步:安装 acme.sh
在 SSH 中执行:

curl https://get.acme.sh | sh -s email=你的邮箱@example.com

安装完成后重新加载 Shell 环境:

source ~/.bashrc

第二步:申请 API 密钥(如果你使用 DNSPod、阿里云等 DNS 验证)
为了批量且静默地验证域名,建议使用 DNS API 模式。以腾讯云 DNSPod 为例,去控制台获取 DP_IdDP_Key,然后 export 环境变量。

第三步:编写批量脚本
创建一个文件 batch_ssl.sh,内容如下:

#!/bin/bash
# 要申请的域名列表,一行一个
domains=(“example1.com” “example2.com” “example3.net”)
# 证书输出目录(可选)
output_dir=“/etc/nginx/ssl”
mkdir -p “$output_dir”

for domain in “${domains[@]}”; do
  echo “正在为 $domain 申请证书...”
  acme.sh --issue --dns dns_dp -d “$domain” --keylength ec-256
  # 安装证书到宝塔默认路径(根据实际修改)
  acme.sh --install-cert -d “$domain” \
    --cert-file “$output_dir/$domain.crt” \
    --key-file “$output_dir/$domain.key” \
    --fullchain-file “$output_dir/$domain.fullchain.crt”
  echo “$domain 完成。”
done

注意:dns_dp 代表 DNSPod,
如果域名在其他服务商,
请修改 --dns 参数(如 dns_cf 对应 Cloudflare)。keylength ec-256 表示 ECC 证书,
兼容性好。

第四步:执行脚本
给予执行权限并运行:

chmod +x batch_ssl.sh
./batch_ssl.sh

等待所有域名验证完成,通常每个域名 10-30 秒。

第五步:在宝塔面板中关联证书
生成证书文件后,需要去宝塔后台 网站 → 对应站点 → SSL → 其他证书,手动上传 .key.fullchain.crt 文件并保存。这一步需要逐个操作,但证书已提前申请好,只需上传,比逐个从零申请快很多。

高频问题与避坑指南

Q:申请过程中提示“无权限”或“连接超时”怎么办?
A:检查服务器是否可正常访问 api.acme.sh 和 Let‘s Encrypt 的验证服务器。防火墙开启 80 和 443 端口;DNS API 密钥是否写对。

Q:批量申请会不会被 Let’s Encrypt 限制频率?
A:Let‘s Encrypt 对每个域名的申请频率为 50 次/周。你平时手动操作也没问题,但脚本执行时如果域名数量很多(超过 200),建议分批执行,每次间隔几分钟。

Q:证书申请成功后,宝塔面板不识别?
A:宝塔默认的 SSL 存储路径不同,你的脚本输出目录需要与宝塔一致。最简单的方法:先在宝塔上手动为某个站点申请一次证书,然后记录证书实际存储路径(一般是 /www/server/panel/vhost/cert/站点目录/),修改脚本中的输出目录即可。

避坑重点

  • 不要在凌晨执行大量申请,容易触发 Let’s Encrypt 的限制规则。
  • 定期检查证书有效期,建议设置 crontab 每月 1 号执行一次脚本,同时更新宝塔的证书文件。
  • 如果站点使用了反向代理或 CDN,需要确保验证时源站可正常返回 80/443 响应,否则验证失败。

效果验证

执行完成后,随便访问几个站点,查看浏览器地址栏的锁标志是否正常。
在宝塔后台的 网站 → SSL 页面,也可以看到证书状态和到期时间。
你也可以用命令验证:

curl -I https://example1.com 2>/dev/null | grep “SSL”

如果输出包含证书信息,说明批量申请成功。

至此,你已经掌握了在宝塔面板中通过脚本批量申请 SSL 证书的方法。
以后站点数量增加时,只需修改脚本中的域名列表,再执行一遍就行。
如果你想了解更多宝塔自动续期的配置,可以继续阅读本站相关教程。

分享到:
上一篇
磁盘空间爆满自动清理日志定时任务
下一篇
移动端专项速度优化外贸独立站实操
1
系统公告

机房迁移升级通知

尊敬的用户: IP 段 103.23.148.x、156.224.29.x 原香港一区线路波动、攻击频繁,平台定于 7 月 5 日凌晨分批迁移至香港 GIA 机房,硬件升级 AMD 铂金机型。 迁移均在凌晨操作,最大程度降低业务影响,迁移期间服务器临时关机; 升级后配置不降低、费用不涨价,数据默认同步迁移; 迁移后 IP 全部更换,请及时修改域名解析、防火墙白名单; 建议提前备份重要数据,有问题可联系在线客服。 感谢理解与支持! 泽御云科技 2026.06.30
服务中心
客服
在线客服
24小时为您服务
咨询
联系我们
联系我们,为您的业务提供专属服务。
24/7 技术支持
如果您遇到寻求进一步的帮助,请过工单与我们进行联系。
24/7 即时支持
泽御云
售前客服
泽御云
泽御云
售后客服
泽御云
技术支持
评价
您对当前页面的整体感受是否满意?
😞
非常不满意
😕
不满意
😐
一般
🙂
满意
😊
非常满意