如何在没有交互的情况下安装 Certbot (Let's Encrypt)?

Posted

技术标签:

【中文标题】如何在没有交互的情况下安装 Certbot (Let\'s Encrypt)?【英文标题】:How to install Certbot (Let's Encrypt) without interaction?如何在没有交互的情况下安装 Certbot (Let's Encrypt)? 【发布时间】:2018-08-16 18:58:17 【问题描述】:

我正在编写一个 bash 脚本,它在新安装的服务器中引导整个项目基础架构,我想使用 letcecrypt certbot 配置 ssl 安装。在我执行行之后:

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

系统提示我几个问题。 certbot 可以在没有任何交互的情况下运行,同时将一些参数作为参数或其他东西传递吗?

【问题讨论】:

【参考方案1】:

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

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

配置选项的完整列表可在此处获得:

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

【讨论】:

还包括'--domains' 请记住,--non-interactive 不是防故障的,如果缺少 3 个强制性标志,证书仍然无法生成(有关更多信息,请参阅我的答案)。 没用。我收到此错误Missing command line flags. For non-interactive execution, you will need to specify a plugin on the command line. Run with '--help plugins' to see a list of options, and see https://eff.org/letsencrypt-plugins for more detail on what the plugins do and how to use them. 艾哈迈德,您缺少--apache,或--nginx,或您正在使用的任何服务器。顺便说一句,我发现“还包括 --domains”评论不够充分 - 我不清楚服务器名称是否需要跟在它后面。这是我的完整命令格式,它(使用 root)有效:certbot --nginx --non-interactive --agree-tos --domains example.com --email webmaster@example.com @Ahmed 你能帮我什么意思吗?名称服务器域无法从 Internet 访问,因为有防火墙或过滤路由器阻止 UDP 和 TCP 连接到此主机上的端口 53连接。防火墙配置必须允许 Internet 上任何主机在此端口上的连接,DNS 才能正常运行。【参考方案2】:

Certbot 提供了几个inline flags and "subcommands"(他们的昵称),可以帮助使用 Bash 或 shell 脚本自动生成免费 SSL 证书的过程。

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

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

但实际上这个标志并不是很有帮助,因为它的作用并不大。例如,如果您的脚本中缺少关键标志,证书仍然无法生成。坦率地说,我认为 Certbot 取消上述标志会更好,因为它相当具有误导性。

以下是所需的最少标志:

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

您还必须指定您想要的 Let's Encrypt installer plugin(环境)类型,例如,您可以选择“独立”或“手动”等...对于大多数情况,如 WordPress Web 服务器,您应该选择“webroot”,以便 Certbot 可以通过公共 root 轻松验证所有权(确保对 /.well-known* 的访问未被阻止):

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

这是我们use in 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 目录名称,从而有助于保留您的文件/文件夹干净整洁。

【讨论】:

不错 :) 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/ 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

以上是关于如何在没有交互的情况下安装 Certbot (Let's Encrypt)?的主要内容,如果未能解决你的问题,请参考以下文章

Glassfish ssl安装与certbot

HTTPS实现及自动续期

如何在没有用户交互的情况下启动 Open Camera 应用程序来拍照?

如何在 React Native 中在没有用户交互的情况下收到通知时打开应用程序

如何在没有用户交互的情况下禁用 wifi 辅助

如何在没有用户交互的情况下在后台接收 iOS 通知