如何无需交互安装Certbot(Let's Encrypt)?

80

我正在撰写一个Bash脚本,它可以在新安装的服务器上引导整个项目基础架构,并且我想使用Let's Encrypt Certbot配置SSL安装。 在执行以下行后:

certbot --nginx -d $( get_server_name ) -d www.$( get_server_name ).com

我被提示回答几个问题。是否可以在传递参数或其他方式时不需要任何交互来运行certbot?

2个回答

130

您可以通过添加以下选项,使Certbot“静默”运行:

--non-interactive --agree-tos -m webmaster@example.com

完整的配置选项列表在此处提供:

https://certbot.eff.org/docs/using.html


12
请将“--domains”也包含在内。 - Arno Duvenhage
2
请记住,--non-interactive 并不是万无一失的,如果缺少三个必要的标志,则证书仍将无法生成(有关更多信息,请参见我的答案)。 - Jesse Nickles
3
Ahmed,你漏掉了--apache--nginx,或者任何你正在使用的服务器。顺便说一下,我觉得“还包括--domains”的注释不够清楚,对我来说不太明确,需要在其后面指定服务器名称。这是我的完整命令格式,可以正常运行(需要root权限):certbot --nginx --non-interactive --agree-tos --domains example.com --email webmaster@example.com - DHW
@Ahmed,你能帮我看一下这是什么意思吗?名称服务器域无法从互联网访问,因为有防火墙或过滤路由器阻止了对此主机上端口53的UDP和TCP连接。防火墙配置必须允许来自互联网上任何主机的连接到该端口,以使DNS正常工作。 - Kwall
--non-interactive still working, however, -d arg is not working anymore, it could --domains mydomain.com - Marc Guillem
显示剩余2条评论

36

有几个内联标志和“子命令”(它们的昵称)由Certbot提供,可以帮助使用Bash或shell脚本自动化生成免费的SSL证书。

如@match所提到的,最相关的标志是:

  • --noninteractive ...或者... --non-interactive

然而实际上这个标志并没有太大的帮助,因为它并没有做很多事情。如果你的脚本中缺少重要的标志,例如,证书仍将无法生成。坦白地说,我认为Certbot最好取消上述标志,因为它有些误导。

以下是最低限度需要的标志:

  1. --agree-tos
  2. --register-unsafely-without-email ...或... -m username@example.com
  3. -d example.com 和/或 -d www.example.com

您还必须指定您想要的Let's Encrypt 安装程序插件(环境)的类型,例如,您可以从“standalone”或“manual”等中选择... 对于大多数情况,例如WordPress Web服务器,您应该选择“webroot”,这样Certbot可以通过公共根轻松验证所有权(确保未阻止对/.well-known*的访问):

--webroot -w /var/www/html/

这是我们在SlickStack中使用的完整命令,用于安装SSL证书

## install Certbot SSL certificate ##
certbot certonly --noninteractive --agree-tos --cert-name slickstack -d ${SITE_TLD} -d www.${SITE_TLD} -d staging.${SITE_TLD} -d dev.${SITE_TLD} --register-unsafely-without-email --webroot -w /var/www/html/

在我们的情况下,我们将--cert-name硬编码为slickstack,因为每个VPS服务器只安装了一个网站,这样可以使其他服务器管理任务(和脚本)更易于管理。但是,如果您要在同一台服务器上安装多个域和SSL证书,您可以将子命令--cert-name更改为命名为每个TLD域,以此类推。这会影响SSL目录名称,从而有助于保持文件/文件夹的整洁。

1
不错的 :) certbot certonly --noninteractive --agree-tos --cert-name ${SITE_TLD} -d ${SITE_DOMAIN_ONE} -d ${SITE_DOMAIN_TWO} -m ${SSL_EMAIL} --webroot -w /var/www/html/ - Dr Deo
sudo certbot --noninteractive --agree-tos --no-eff-email --cert-name domain.com --apache --no-redirect -d domain.com -d www.domain.com -m siteadminsemail@gmail.com - Dr Deo
错误信息有误导性,因为它让我相信我可以使用--agree-tos-m选项进行单独调用,以便摆脱它,然后随后就不需要它了。但事实并非如此。在另一台主机上,我从来不需要使用它,而且那是很久以前的事情,我已经不记得我当时做了什么了。 - Michael

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接