Czy to poprawny sposób ustawienia crona na odnowienie certyfikatu Let's Encrypt w Apache2? Używam Ubuntu 16.04.
@monthly letsencrypt renew && service apache2 reload
cron
lets-encrypt
użytkownik3448600
źródło
źródło
/etc/cron.d/certbot
Odpowiedzi:
Miesięcznik nie jest wystarczająco częsty. Ten skrypt powinien być uruchamiany co najmniej raz w tygodniu, a najlepiej codziennie. Pamiętaj, że certyfikaty nie są odnawiane, chyba że zbliżają się do wygaśnięcia, a co miesiąc spowodowałoby to, że twoje istniejące certyfikaty czasami wygasają przed ich odnowieniem.
Nazwa programu to nazwa, od
certbot
której zmieniono nazwęletsencrypt
. Jeśli nadal używaszletsencrypt
, musisz zaktualizować do bieżącej wersji.Oprócz tych problemów, to mniej więcej tyle samo, co moich zadań crona.
Zauważ, że w 18.04 LTS pakiet letsencrypt został (w końcu) przemianowany na certbot. Zawiera teraz systemowy zegar, który można włączyć do planowania odnawiania certyfikatów przez,
systemctl enable certbot.timer
isystemctl start certbot.timer
. Jednak Ubuntu nie podał sposobu określania haków. Musisz ustawić przesłonięcie,certbot.service
aby przesłonićExecStart=
żądanym wierszem poleceń, dopóki Ubuntu nie naprawi tego.źródło
--renew-hook
zamiast tego--post-hook
zrestartować komputer tylko wtedy, gdy certyfikat zostanie pomyślnie odnowiony.certbot renew
po prostu zadziała ™ExecStartPost=/usr/sbin/service nginx reload
. Pracował dla mnie!ExecStartPost=
to dobry pomysł. Dlaczego o tym nie pomyślałem? Ale pamiętaj, żeservice
polecenie jest przestarzałe; nie będzie na zawsze. Przejdź do odpowiednichsystemctl
poleceń.Nie mam wystarczającej reputacji, aby komentować, więc odpowiem tutaj. Niedawno (październik 2017 r.) Zainstalowałem i uruchomiłem certbot na serwerze Ubuntu 16.04, a zadanie CRON odnowienia zostało utworzone automatycznie w
/etc/cron.d/certbot
.Oto zadanie cron, które zostało utworzone:
Dobrym pomysłem byłoby sprawdzenie, czy ten plik już istnieje przed utworzeniem pozycji crontab.
źródło
certbot renew
jeśli/run/systemd/system
jest obecne - dzieje się tak, ponieważ zamiast tego systemb działa z uruchomionym programem certbot - przeczytaj więcej o tym programie i tutaj .43 6 * * *
sprawi, że będzie działać codziennie o 06:43. Raz dziennie powinno wystarczyć, ale jedno z nich działa dobrze.Dokumentacja certbota zaleca uruchamianie skryptu dwa razy dziennie:
Jak wspomina Michael Hampton, nazwa zmieniła się na certbot, ale nadal zapewniają opcję -auto, która aktualizuje się.
certbot-auto
Polecenia potrzebne przywileje roota do uruchomienia, więc linia w skrypcie cron powinien wyglądać mniej więcej tak:W moim przypadku
certbot-auto
skrypt jest umieszczony w katalogu domowym użytkownika git. Dokładne polecenie jest wtedyZauważ, że przykład w dokumentacji odpowiada ścieżce względnej, wskazanej kropką, która może być myląca:
./path/to/certbot-auto renew --quiet
Pamiętaj, aby wcześniej przetestować komendę odnawiania w powłoce, aby przetestować ścieżkę, jeśli certyfikat nie jest przeznaczony do odnowienia, nic się nie wydarzy (uruchom ten test bez
--quiet
flagi, aby zobaczyć, co się dzieje).Ponowne załadowanie serwera nie jest absolutnie konieczne, gdy certyfikat jest odnawiany w ten sposób, ponieważ ścieżka do certyfikatu na żywo nie zmienia się, jeśli jest poprawnie skonfigurowana.
Dzieje się tak, jeśli korzystasz z Apache - w przypadku Nginx rozważ dodanie haka odnawiania, takiego jak:
źródło
--renew-hook
do restartowania tylko po udanym odnowieniu: guyrutenberg.com/2017/01/01/…Nie powinieneś niczego konfigurować. Każda ostatnia instalacja certbota w Debianie / Ubuntu powinna zainstalować systemowy zegar i zadanie cron (a zadanie cron uruchomi się tylko
certbot
wtedy, gdy systemd nie jest aktywny, więc nie uruchomisz obu).systemowy zegar
Możesz sprawdzić systemowe liczniki czasu za pomocą polecenia
systemctl list-timers
(lubsystemctl list-timers --all
jeśli chcesz również pokazać nieaktywne liczniki czasu). Coś takiego:Timer certbota powinien tu być
/lib/systemd/system/certbot.timer
i wykona polecenie określone w/lib/systemd/system/certbot.service
certbot.timer
wykona usługę `certbot.service o godzinie 12 i 12 po losowym opóźnieniu do 12 godzin (43200 sekund).i
certbot.service
wykona polecenie odnowienia.praca crona
Jak wspomnieli inni, istnieje również zadanie cron zainstalowane w
/etc/cron.d/certbot
:To robi:
test -x /usr/bin/certbot -a \! -d /run/systemd/system
- sprawdzić, czy/usr/bin/certbot
jest to plik wykonywalny i że/run/systemd/system
to nie katalogiem. Przejdź do następnego bitu tylko wtedy, gdy sprawdzenie się powiedzie.perl -e 'sleep int(rand(43200))'
- spać losowo od 0 sekund do 12 godzin (43200 = 12 x 60 x 60).certbot -q renew
sprawdź swoje certyfikaty i w razie potrzeby odnów je.-q
Flaga jest „cichy” - nie wytwarzają żadnego wyjścia, chyba że jest to błąd.Początkowo byłem zdezorientowany zadaniem crona, ponieważ nie miał on działać z powodu systemd, więc jak uruchomić certbota? Znalazłem odpowiedź w tym poście na forum, na którym oparłem tę odpowiedź.
źródło
/etc/cron.d/certbot
istnieje,systemctl list-timers
pokazujecertbot.timer
, ale moje certyfikaty nie zostały odnowione. Uruchamianiecertbot
ręczne działało dobrze, więc nie wiem, co się dzieje. Skończyło się dodawaniecrontab
wpisu starej szkoły .test
aby sprawdzić, czy systemd jest aktywne, a jeśli tak, zadanie cron natychmiast kończy pracę bez uruchamianiacertbot
- zobacz tekst o zadaniu cron. Będę bardziej precyzyjnie edytować tekst.W przypadku odnawiania certyfikatu LetsEncrypt zwykle używam getssl . Jest to bardzo poręczne opakowanie powłoki, które może nawet instalować certyfikat na innych komputerach za pośrednictwem połączenia SSH.
Wpis crona jest następujący:
01 23 * * * root /root/scripts/getssl/getssl -u -a -q >>/var/log/getssl.log 2>&1 ; /usr/sbin/apache2ctl graceful
Jak już zasugerowano, należy go uruchamiać codziennie, a nawet lepiej dwa razy dziennie.
źródło
Jak już wspomniano przez glaux:
Źródło: https://certbot.eff.org/all-instructions/#debian-8-jessie-apache
Skończyło się na tym (bieganie jest dwa razy dziennie, o 01:00 i codziennie o 13:00):
lub nawet lepiej:
Nie testowałem, ale powinno to również działać:
Źródło: https://certbot.eff.org/docs/using.html
źródło
--renew-hook
zrestartował serwer tylko wtedy, gdy certyfikat zostanie faktycznie odnowiony.--post-hook
czy zamiast tego nie powinno--renew-hook
być ?service apache2 restart
service restart apache2
service restart apache2
Nie jest poprawna komenda / usługa.Oto, czego używam:
daje wynik jako:
Mówi też, że apache jest już zrestartowany, więc nie trzeba tego robić od nowa. Jeśli uruchomię go ponownie:
dlatego codzienne odnawianie certyfikatu nie stanowi problemu, mój cron to:
Używam skryptu, aby dostosować logowanie do oddzielnego pliku, więc oto mój plik cronautorenew.sh:
źródło
Inni członkowie już udzielili dużo bardziej szczegółowych odpowiedzi. Ale wygląda na to, że powinienem o tym wspomnieć.
W wersji certbot
--renew-hook
flaga 0.21.1 została zmieniona na--deploy-hook
Upewnij się, że nie używasz przestarzałej flagi.źródło
Według przewodnika po certyfikacie EFF
Jeśli nie masz pewności, czy Twój system ma to już zautomatyzowane, sprawdź crontab systemu (zwykle w timery
/etc/crontab/
i/etc/cron.*/*
$ crontab -l
i systemowe$ systemctl list-timers
.źródło