web-dev-qa-db-ja.com

Let's Encrypt certbotをスケジュールして、cronの証明書を自動的に更新するにはどうすればよいですか?

矛盾する推奨事項を見てきました。 eff.org docs から:

cronジョブまたはsystemdジョブを設定している場合は、1日に2回実行することをお勧めします...更新タスクの時間内にランダムな分を選択してください。

毎週の仕事 の推奨事項も確認しました。

私はcronの専門家ではないので、cronジョブをセットアップするための詳細な手順を含む回答を希望します。

25
Chapman Atwell

最近(2018年4月)Ubuntu 16.04サーバーにcertbot(バージョン0.22.2)をインストールして実行しました。更新cronジョブが/etc/cron.d/certbotに自動的に作成されました。

作成されたcronジョブは次のとおりです。

# /etc/cron.d/certbot: crontab entries for the certbot package
#
# Upstream recommends attempting renewal twice a day
#
# Eventually, this will be an opportunity to validate certificates
# haven't been revoked, etc.  Renewal will only occur if expiration
# is within 30 days.
Shell=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin

0 */12 * * * root test -x /usr/bin/certbot -a \! -d /run/systemd/system && Perl -e 'sleep int(Rand(3600))' && certbot -q renew

新しいCronジョブを配置する前に、これを確認してください。

29
V-Q-A NGUYEN

そこで、1日に1回実行するようにスケジューリングすることに決めました。最初に ドキュメントが推奨 :として自動更新をテストしました

Sudo letsencrypt renew --dry-run --agree-tos

次に、crontabを更新しました。

Sudo crontab -e

これは私が追加した行です:

12 3 * * *   letsencrypt renew >> /var/log/letsencrypt/renew.log

これにより、毎日午前3時12分に更新が実行されます。私は、ドキュメントが更新サーバーに負荷を分散するために「1時間以内のランダムな分」を推奨していると思います。したがって、0、15、30、または45以外のものが優先されると思います。

Jenkinsでできるように、cron設定で 分をランダム化する を調べました。元のEEFページにはこの例があります。

0 0,12 * * * python -c 'import random; import time; time.sleep(random.random() * 3600)' && /usr/local/bin/certbot-auto renew

最後に、 Sudo bash を使用してcronコマンドをテストしました。

Sudo bash -c "letsencrypt renew >> /var/log/letsencrypt/renew.log"
30
Chapman Atwell

Debian Jessie以上(Ubuntuを含む)では、Certbotの更新のためにcronは実行されません。代わりに、systemdタイマーが使用されます。タイマーを参照:/lib/systemd/system/certbot.timer

このタイマーは次のサービスを実行します:/lib/systemd/system/certbot.service

を含む:

[Service]
Type=oneshot
ExecStart=/usr/bin/certbot -q renew
PrivateTmp=true

すべてのタイマーをリストするには、ターミナルで次のコマンドを実行します。

systemctl list-timers

うまくいけば、Certbotはこの一部です:

Mon 2019-02-04 08:38:45 CET 9h左日2019-02-03 15:25:41 CET 8h前certbot.timer certbot.service

更新:

反対票による。 DebianベースのディストリビューションにCertbotをインストールする方法を追加します(Linuxディストリビューションによって異なる場合があります)。

しかし、たとえばDebian Stretch内では、certbotのバックポートパッケージを次の方法でインストールできます。

Sudo apt-get install certbot -t stretch-backports

これにより、上で示したファイルが自動的にインストールされます!したがって、certbotタイマーが自動的にスケジュールされ、サービスが実行され、更新が再度実行されます。

手動で更新を実行することは常に可能です:

Sudo /usr/bin/certbot renew

--force-renewalフラグを使用して強制できます。詳細については、更新のヘルプテキストを参照してください。

/usr/bin/certbot --help renew

Certbotパッケージのファイル部分(含むが、それに限定されない):

dpkg-query -L certbot
...
/lib/systemd/system/certbot.service
/lib/systemd/system/certbot.timer
...
16
danger89

通常、Ubuntu 16.04サーバーのWebサーバーでcertbotを実行すると、cronが自動的に作成されます

#cat /etc/cron.d/certbot

0 */12 * * * root test -x /usr/bin/certbot -a \! -d /run/systemd/system && Perl -e 'sleep int(Rand(3600))' && certbot -q renew
2
Javeed Shakeel

次の行を/etc/crontabに追加して、更新試行daily00:00の間のランダムな分に実行します16:40

1  1    * * *   root    sleep ${RANDOM:0:3}m && /home/admin/certbot-auto renew --quiet --no-self-upgrade --authenticator webroot --installer Apache -w /var/www/mywebroot

現在、1年以上にわたって素晴らしい作品です。

更新コマンド自体はあなたによって異なる場合があります-私はwebrootを使用しましたが、当時は最も堅牢であると思われました。

0
andruso