#!/bin/bash # Autor: Matthias Soika, Norman Specht # Mail: m.soika@info-linux.de # Date: 28.12.2017 | 27.11.2018 # Version: 0.8 | Final # Description: Automatisches Aktualisieren der Certifikate von Lets Encypt # Crontab -e 0 3 * * * /usr/sbin/new_cert.sh ## Installation # wget -c -O /usr/sbin/renew_cert.sh https://ftp.info-linux.de/arbeiten/Linux/renew_cert.txt && chmod 754 /usr/sbin/renew_cert.sh # Variablen: LOGDIR=/var/log/new_cert LOG="$LOGDIR/$(date +%d-%m-%Y).log" LECPATH=/etc/letsencrypt/archive FIND=$(which find) LS=$(which ls) HEAD=$(which head) LN=$(which ln) SORT=$(which sort) SERVICE_APACHE="/etc/init.d/apache2" CERTBOT=$(which certbot) REALPATH=$(which realpath) FILE=/root/bin/test_service.sh # Prüfungen: if [ ! $UID = 0 ]; then echo; echo " Sie sollten dieses Skript als user root ausführen, sonst läuft es nicht!"; echo; exit; fi if [ -z $FIND ]; then echo; echo " Das Programm FIND wurde nicht gefunden. Das ist schlecht."; echo; exit; fi if [ -z $LS ]; then echo; echo " Das Programm LS wurde nicht gefunden. Das ist schlecht."; echo; exit; fi if [ -z $HEAD ]; then echo; echo " Das Programm HEAD wurde nicht gefunden. Das ist schlecht."; echo; exit; fi if [ -z $LN ]; then echo; echo " Das Programm LN wurde nicht gefunden. Das ist schlecht."; echo; exit; fi if [ -z $SORT ]; then echo; echo " Das Programm SORT wurde nicht gefunden. Das ist schlecht."; echo; exit; fi if [ ! -d $LECPATH ]; then echo; echo " Das Verzeichnis letsencrypt existiert nicht"; echo; exit; fi if [ ! -x $SERVICE_APACHE ];then echo; echo " Der Apache2 Dienst ist anscheinend nicht verfügbar! Bitte prüfen sie das!"; echo; exit; fi if [ -z $CERTBOT ];then echo; echo " Das Programm Certbot scheint nicht installiert zu sein. Bitte prüfen Sie das!"; echo; exit; fi if [ -z $REALPATH ];then echo; echo " Das Programm realpath scheint nicht installiert zu sein. Bitte prüfen Sie das!"; echo; exit; fi if [ ! -d $LOGDIR ]; then mkdir -p $LOGDIR; fi # Lösche alte LOG files $FIND $LOGDIR -type f -mtime +120 -delete # Sollte ein LOG für heute existieren, dann lösche es #rm -f $LOG # Erstelle leeres LOG file touch $LOG for CONF in $LECPATH/*/; do echo "+ $CONF" >> $LOG # Suche nach der jüngsten Datei. CURRENTFILE=$($FIND $CONF -type f | $SORT -r | $HEAD -1) # Prüfe auf älter als 80 Tage, wenn diese Bedingung erfüllt ist hole ein neues Zertifikat und starte den Apache neu. if [ -z $CURRENTFILE ];then echo "+-- Irgendwas stimmt nicht! Ich konnte keine Datei automatisiert ermitteln." >> $LOG else if [[ $($FIND "$CURRENTFILE" -mtime +80 -print) ]]; then if [ -e $FILE ] && [ -x $FILE ]; then chmod 644 $FILE; fi # Stoppe den Apache2 $SERVICE_APACHE stop >> $LOG # Hole ein neues Zertifikat von Let's Encypt $CERTBOT renew >> $LOG # Warte 30 Sekunden sleep 30 # Starte den Apache2 neu $SERVICE_APACHE start >> $LOG if [ -e $FILE ] && [ ! -x $FILE ]; then chmod 755 $FILE; fi # Wir können hier aufhören, certbot sollte alle certificates erneuert haben cat $LOG exit else echo "+-- Scheint auf dem aktuellen Stand zu sein." >> $LOG fi fi done