E-Mails sind bei vielen täglich das erste was morgens bei der Arbeit überprüft wird. Warum also sollte man sich nicht Status E-Mails zusenden lassen. Dies kann einem evtl. helfen schneller auf bestimmte Probleme zu reagieren. In diesem kurzen Anleitung erkläre ich wie Mails aus der Kommandozeile versendet werden können.
Wer aus einem Skript oder direkt von das Kommandozeile eine E-Mail versenden möchte und keinen eigenen Mailserver betriebt, kann dies mit Hilfe von ssmtp und mailutils realisieren. Dies benutze ich z.B. um mir von meinem Computer den Status und die Logdatei des letzten Backups zu kommen zu lassen. Voraussetzung ist ein E-Mailkonto bei einem Anbieter (Google, GMX o.ä.) oder einen eigenen SMTP-Relay-Server (Smarthost). Da wir so einen offiziellen Mailserver nutzen, sollten unsere Mails auch nicht beim Empfänger im SPAM-Ordner landen. Dies wäre unter Umständen der Fall wenn wir einen Mailserver mit dynamischer IP betreiben oder diesen falsch konfiguriert haben.
Mails aus der Kommandozeile einrichten
Schritt 1 Installation
Den extrem einfachen gehaltenen Mail-Transfer-Agent (MTA) ssmtp und das Mailframework mailutils installieren mit:
sudo apt-get install mailutils ssmtp
Schritt 2 Konfiguration
Jetzt müssen die Einstellungen vorgenommen werden, mit welchem Smarthost gesendet werden soll und welcher Benutzer senden darf.
Für den Smarthost muss folgende Datei angepasst werden:
sudo nano /etc/ssmtp/ssmtp.conf
Als Beispiel, zeige ich hier die Konfigurationen für GMX.de und GoogleMail. Ihr müsst diese nur noch mit euren Daten anpassen.
Beispiel GoogleMail
root=BEISPIEL@googlemail.com mailhub=smtp.gmail.com:587 hostname=BEISPIEL@googlemail.com UseTLS=YES UseSTARTTLS=YES AuthUser=BEISPIEL AuthPass=MEINPA$$W0RT AuthMethod=plain FromLineOverride=YES
Beispiel GMX.de
root=BEISPIEL@gmx.de mailhub=mail.gmx.net:587 hostname=gmx.net UseTLS=YES UseSTARTTLS=YES AuthUser=BEISPIEL@gmx.de AuthPass=MEINPA$$W0RT AuthMethod=plain FromLineOverride=YES
Wie Ihr seht, unterscheiden diese sich nicht sonderlich. Darum ist es auch sehr leicht dies für einen eigenen oder andern Mailserver anzupassen. Weiter Infos zu dieser Konfigurationsdatei kann auf der man page gefunden werden.
Nun muss die 2. Konfigurationsdatei angepasst werden. Hier legt Ihr fest welcher Benutzer senden darf.
sudo nano /etc/ssmtp/revaliases
Beispiel wäre:
root:BEISPIEL@googlemail.com:smtp.gmail.com:587 BENUTZER1:BEISPIEL@googlemail.com:smtp.gmail.com:587 BENUTZER2:BEISPIEL@gmx.net:mail.gmx.net:587
Bzw. müssen die Daten dann für einen andern Smarthost angepasst werden.
Schritt 3 Testen
Jetzt könnt ihr endlich die erste Testmail von der Kommandozeile senden.
Gebt dazu folgenden Text ein:
echo "Hallo dies ist ein Test" | mail empfaenger@beispiel.de -s "MeinBetreff"
Um einen Anhang mitzusenden muss der Parameter -A mitangeben werden:
echo "Hallo dies ist ein Test mit Anhang" | mail empfaenger@beispiel.de -s "MeinBetreff" -A "/tmp/beispiel.txt"
Wer Probleme hat, bzw. glaubt keine E-Mails zu senden, kann sich mit folgendem Befehl:
echo "Subject:TEST" | ssmtp -v empfaenger@beispiel.de
den Verbindungsablauf ins Terminal holen. So gibt es bei Problemen nützliche hinweise auf z.B. falsche Port und Adressen Einstellungen.
Optional Schritt 4 Die Konfiguration schützen
Da die Datei /etc/ssmtp/ssmtp.conf euer Passwort im Klartext enthält, sollte diese besonders geschützt werden! Dazu empfiehlt es sich eine eigene Gruppe für den MTA ssmtp anzulegen, dass nur dieser und ROOT die Datei lesen darf.
Folgende Schritte sind hierzu notwendig:
su groupadd ssmtp chown :ssmtp /etc/ssmtp/ssmtp.conf chown :ssmtp /usr/sbin/ssmtp chmod 640 /etc/ssmtp/ssmtp.conf chmod g+s /usr/sbin/ssmtp exit
Ein Dank geht hierfür an den Arch Linux Wiki Artikel. Ohne diese Absicherung wäre mit diese Methode auch zu unsicher gewesen.
Die Rechte können abschließend mit ls -l überprüft werden und sollten jetzt wie folgt gesetzt sein:
ls -l /etc/ssmtp/ssmtp.conf -rw-r----- 1 root ssmtp 761 Mai 20 17:31 /etc/ssmtp/ssmtp.conf
Jetzt solltet Ihr auch in der Lage sein, einen Status aus z.B. einem Backupskript per Mail zu versenden.
Dies könnte folgendermaßen aussehen:
#!/bin/bash RECP="empfaenger@beispiel.de" # E-Mail Empänger des Statusbericht SOURCE=$HOME # Backup Quelle BACKUPDIR=/mnt/usb1/backup # Backup Ziel DATE=$(date +%d.%m.%Y" "%H:%M) # Datums & Uhrzeit # tar -cpf ${BACKUPDIR} ${SOURCE} # Backup starten # if [ $? -ne 0 ]; then # Überprüfen ob der letzter Befehl erfolgreich war mail $RECP -s "Backup war fehlerhaft!" <<EOM Das Backup wurde mit Fehler(n) beendet. Start: ${DATE} Ende: `date +%d.%m.%Y" "%H:%M` Bitte das letzte Backup überprüfen und ggf. wiederholen. EOM else mail $RECP -s "Backup war erfolgreich" <<EOM Das Backup wurde erfolgreich in ${BACKUPDIR} erstellt. Start: ${DATE} Ende: `date +%d.%m.%Y" "%H:%M` EOM fi #EOF
Natürlich ist dies nur ein sehr einfaches Beispiel und dient nicht zum Sicher irgendwelcher Daten. Möglichkeiten so Mails zu versenden gibt es viele, mit etwas Kreativität können auch sinnvollere Skripte zu Stande kommen.
Wer seine Mail verschlüssel über die Kommandozeile versenden möchte sollte sich folgenden Artikel anschauen: GPG verschlüsselte Mails aus der Kommandozeile
ENDE :)
Spricht denn etwas dagegen, in Scripten gleich auf einen Client wie mutt zu setzen?
Also z.B. so:
mutt -s '$wurst' abc@gmail.com -a irgendeinlog.txt
Vielleicht spricht aber auch das Thema Sicherheit gegen die Nutzung solcher Clients auf Servern, da kenne ich mich nicht gut genug aus.
Smartphone- oder Tablet-Nutzer (ich kann da nur von Android und Meego reden) können dann auch ihren gewohnten Mailclient für die Kommandozeile über SSH unterwegs nutzen.
Hi Georg,
aus meiner Sicht spricht technisch nichts gegen Mutt oder andere Kommandozeilen Mailprogramme. Aber da ich es einfach für die Leser und mich halten möchte, setze ich auch auf einen einfach gehaltene Software.
Als alternative zu ssmtp könnte noch msmtp genannt werden.
Hihi.
Zum Artikel: Ich finde es etwas schade, dass “Linuxanleitungen” sich meist auf 1 bestimmte Konfiguration (bestimmter Paketmanager, bestimmte Shell, …) beziehen. Dabei sind sie oft so portabel. Auch unter FreeBSD mit der tcsh zum Beispiel funktioniert es (pkg install ssmtp) weitgehend unverändert.
Hi Tux,
ist mir persönlich auch schon öfters aufgefallen (auch bei mir). Aber mit fällt es schwer die Befehle auf andere Systeme zu portieren, da ich nur Erfahrung mit diesem “einen” System habe.
Gerade FreeBSD wird warscheinlich bei vielen erfahreren Anwendern eingesetzt. Ich kann aber leider nur aus meiner eingeschränkten Sicht schreiben um auch eine gewisse Qualität im Artikel bieten zu können.
Mein Artikel darf aber gerne portiert werden ;)
Port:
1. pkg install ssmtp
2. vi /usr/local/etc/ssmtp/ssmtp.conf
Rest wie beschrieben. (Ungetestet.)