Raspberry Pi: Bash-Script zur Anzeige von Hostname, Uptime, Workload, Temperature und Disk Space nach SSH-Login

bash-screenshot

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: Zertifikate erstellen und erneuern via ACME-Challenge

letsencrypt-logo

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.