814
Wer einen Server im Internet betreibt, sollte wissen, wann sich jemand erfolgreich per SSH anmeldet und zwar sofort, nicht erst beim nächsten Blick ins Log. In dieser Anleitung richten wir auf einem Debian 13 (Trixie) eine Benachrichtigung ein, die bei jedem erfolgreichen SSH-Login eine E-Mail mit Benutzer, Quell-IP, Zeitstempel und Authentifizierungsmethode verschickt.
1. Voraussetzungen
- Debian 13 (Trixie) mit root- bzw. sudo-Zugriff
- OpenSSH-Server läuft,
UsePAM yesist gesetzt (Debian-Standard) - Ein SMTP-Postfach zum Versenden: eigener Mailserver, Hoster-Postfach oder ein Freemail-Account mit App-Passwort
Prüft kurz, ob PAM für SSH aktiv ist:
sshd -T | grep -i usepam
Erwartete Ausgabe:
usepam yes
Bei diesem Inhalt handelt es sich um exklusiven Content für Community Plus Mitglieder und Supporter.
Bitte logge dich mit deinem Account ein um den Inhalt zu sehen.
10. Push-Nachricht statt oder zusätzlich zur E-Mail
Wer ntfy oder Gotify betreibt, hängt vor dem exit 0 einfach einen zweiten Versandweg an:
curl -fsS -m 10 \
-H "Title: SSH-Login auf ${SERVER}" \
-H "Priority: high" \
-H "Tags: warning,key" \
-d "${PAM_USER} von ${QUELLE} um ${ZEIT}" \
https://ntfy.euredomain.de/ssh-alerts >/dev/null 2>&1Code-Sprache: JavaScript (javascript)

Vorschlag für eine Ergänzung des Skripts /usr/local/bin/ssh-login-notify.sh
mit der Abfrage der IP bei einem Zugriff von einem Server mit einer FQDN, die jedoch über einen DynDNS-Dienst aktualisiert wird, weil der Server vom Provider immer wieder eine neue IP zugewiesen erhält (Homeserver etc.):
Hier kannst du im Skript die korrekte IP abfragen und dann in der Liste von IGNORE_HOSTS eintragen:
DOMAIN=”homserver.beispiel.de”
IP_ADDRESS=$(dig +short “$DOMAIN”)
IGNORE_HOSTS=(“192.168.1.” “10.66.66.” $IP_ADDRESS)
Damit werden auch SSH-Logins vom Homeserver auf einen anderen Server nicht mehr mit einer Mail quittiert, sondern erfolgen “still”.
Lieber Christian
sehr gute Idee zur Absicherung des SSH-Servers!
Ich musste bei mir in der Datei /etc/logrotate.d/msmtp noch
einfügen, da ich die Fehlermeldung “error: skipping “/var/log/msmtp” because parent directory has insecure permissions (It’s world writable or writable by group which is not “root”) Set “su” directive in config file to tell logrotate which user/group should be used for rotation.” erhalten hatte. Mit diesem zusätzlichen Eintrag nach create 600 root root funktioniert logotate wie gewünscht.
Ich komme dann aber bei msmtp nicht weiter und erhalte bei den Testmails folgenden Fehler:
msmtp: Netzwerk-Lesefehler: die Wartezeit ist abgelaufen
Was mache ich falsch?
LG Reto