cp -r /etc/letsencrypt/archive/ /var/www/html/LetsEncrypt/
Zugriffsrechte von Dateien und Verzeichnissen rekursiv ändern
sudo chmod -R 777 /etc/letsencrypt/archive/
Raspberry Pi: Bash-Script zur Anzeige von Hostname, Uptime, Workload, Temperature und Disk Space nach SSH-Login
Datei stats-profile-login.sh mit folgendem Inhalt im Home-Verzeichnis anlegen:
#!/bin/sh
HOSTNAME=`hostname -f`
UPTIME0=`cut -d. -f1 /proc/uptime`
UPTIME1=$(($UPTIME0/86400))
UPTIME2=$(($UPTIME0/3600%24))
UPTIME3=$(($UPTIME0/60%60))
UPTIME4=$(($UPTIME0%60))
LOADAVG1=`cat /proc/loadavg | awk '{print $1}'`
LOADAVG2=`cat /proc/loadavg | awk '{print $2}'`
LOADAVG3=`cat /proc/loadavg | awk '{print $3}'`
TEMP=`vcgencmd measure_temp | cut -c "6-9"`
TOTALDISK=`df -h | grep 'dev/root' | awk '{print $2}'`
USEDDISK=`df -h | grep 'dev/root' | awk '{print $3}'`
FREEDISK=`df -h | grep 'dev/root' | awk '{print $4}'`
echo "
Hostname......: $HOSTNAME
Uptime........: $UPTIME1 days | $UPTIME2 hours | $UPTIME3 minutes | $UPTIME4 seconds
Workload ....: $LOADAVG1 (1 min.) | $LOADAVG2 (5 min.) | $LOADAVG3 (15 min.)
Temperature...: $TEMP degrees Celsius
Disk Space....: Total: $TOTALDISK | Used: $USEDDISK | Free: $FREEDISK
"
Skript ausführbar machen:
sudo chmod 777 /home/pi/stats-profile-login.sh
Anschließend die systemweite Profildatei öffnen:
sudo nano /etc/profile
Am Ende der Datei folgende Zeile einfügen:
/home/pi/stats-profile-login.sh
Let’s Encrypt: Wildcard-Zertifikate erstellen und erneuern via ACME- / DNS-Challenge
Analog hier beschriebenem Vorgehen, jedoch folgenden Befehl mit Wildcard (*) ausführen:
sudo ./certbot-auto certonly --manual --agree-tos --manual-public-ip-logging-ok --rsa-key-size 4096 -d domain.tld -d *.domain.tld
Neben ACME- auch DNS-Challenge erforderlich:
Subdomain “_acme-challenge” mit vorgegebenem TXT-record im Nameserver anlegen und deployen.
Prüfen, ob die Inhalte von zwei Textdateien in einer anderen Datei enthalten sind
Am Beispiel von SSL/TLS-Zertifikaten (Let’s Encrypt):
fullchain1.pem ist eine Verkettung von cert1.pem & chain1.pem
Wenn der folgende Befehl keine Abweichungen liefert, ist das Beispiel belegt (proof of concept):
diff fullchain1.pem <(cat cert1.pem chain1.pem)
Die Reihenfolge in der cat-Klammer ist relevant.
Let’s Encrypt: Zertifikate erstellen und erneuern via ACME-Challenge
Voraussetzung:
Installation von Certbot
Zum Let’s Encrypt-Verzeichnis wechseln:
cd /opt/letsencrypt
Folgenden Befehl ausführen:
sudo ./certbot-auto certonly --manual --agree-tos --manual-public-ip-logging-ok --rsa-key-size 4096 -d domain.tld -d www.domain.tld
Es wird automatisch sämtlichen Bestimmungen (TOS: Terms of service) zugestimmt.
Es müssen zwei Challenge-Dateien mit dem jeweils angegebenen Inhalt für die Hauptdomain und Subdomain (www) erzeugt und via SSH bzw. FTP in das root-Verzeichnis der Domain hochgeladen werden. (Tool: Excel-VBA-Script)
Nach erfolgreicher Challenge und Erstellung der SSL/TLS-Zertifikate erfolgt der Wechsel zum Archiv:
cd /etc/letsencrypt/archive
In den jeweiligen Unterordnern des bzw. der Domainnamen sind die Zertifikatsdateien abgelegt:
- cert1.pem
- chain1.pem
- fullchain1.pem (Verkettung von cert1.pem & chain1.pem)
- privkey1.pem
Raspberry Pi: E-Mail bei Wechsel der externen IP-Adresse senden
Script prüft auf die aktuelle externe IP-Adresse und gleicht sie mit der gespeicherten ab. Bei Abweichung (=IP-Wechsel) wird eine E-Mail versendet.
Task 1: Datei IPfile.txt in /home/pi anlegen
Task 2: Folgenden Code in einer neuen Datei unter dem Namen IPmail.py im gleichen Pfad abspeichern:
import socket
import re
import smtplib
# Python3:
from urllib.request import urlopen
# Python2 (deprecated):
# from urllib2 import urlopen
# Define timeout (in seconds) if server is not available
timeout=10
socket.setdefaulttimeout(timeout)
# SETUP: Login credentials of mailbox, mailserver etc.
from_address = 'PLEASE_FILL_OUT'
to_address = 'PLEASE_FILL_OUT'
username = 'PLEASE_FILL_OUT'
password = 'PLEASE_FILL_OUT'
server = smtplib.SMTP('PLEASE_FILL_OUT')
# Define IP address service
url = 'http://ip.fnord.eu'
print ("Active IP address service:",url)
# Open up the URL, then read the contents and start UTF-8 decoding
request = urlopen(url).read().decode('utf-8')
# Extract the IP address only
myIP = re.findall("\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}", request)
myIP = str(myIP)
print ("The actual IP address is:",myIP)
def send_email(myIP):
subject = 'Info: external IP changed'
body_text = myIP + ' is your new IP address'
message = '\r\n'.join(['To: %s' % to_address,
'From: %s' % from_address,
'Subject: %s' % subject,
'', body_text])
# Actually send the email
server.starttls()
server.login(username,password)
server.sendmail(from_address, to_address, message)
server.quit()
print ("The notification (E-Mail) was sent to recipient's address.")
# Open up IPfile.txt and extract the contents
with open ('/home/pi/IPfile.txt', 'rt') as IPfile:
IPfile = IPfile.read() # Read the text file
# Check if IP address has changed
if IPfile == myIP:
print ("Your IP address did not change.")
else:
print ("You got a new IP address.")
with open('/home/pi/IPfile.txt', 'wt') as IPfile:
IPfile.write(myIP)
print ("The new IP address was saved successfully.")
send_email(myIP)
Task 3: Cronjob via SSH anlegen
crontab -e
Am Ende folgende Zeile einfügen, damit das Script alle 2 Minuten ausgeführt wird und bei Verlassen speichern:
*/2 * * * * python3 /home/pi/IPmail.py
Dieses Python-Script basiert auf einem
YouTube-Tutorial von Alexander Baran-Harper und wurde für den persönlichen Gebrauch modifiziert / erweitert.