SSH mit Zwei-Faktor-Authentifizierung – sicher einloggen, ohne SSH-Keys
SSH ist das Rückgrat der Serververwaltung – schnell, universell, aber auch ein beliebtes Angriffsziel.
Viele Administratoren setzen entweder auf reine Passwörter oder verwalten komplexe SSH-Keys. Doch es geht einfacher und sicherer: Passwort-Login plus zeitbasierter 2-Faktor-Code (TOTP), z. B. über Google Authenticator.
Das erlaubt sicheren Zugriff von überall – ganz ohne Schlüsselverwaltung.
Warum 2FA bei SSH so wichtig ist
Ein einzelnes Passwort reicht Angreifern, um in dein System einzudringen.
Mit einer Zwei-Faktor-Authentifizierung (2FA) muss zusätzlich ein Einmalcode eingegeben werden, der sich alle 30 Sekunden ändert.
Dieser Code kommt aus einer App wie Google Authenticator, Aegis oder FreeOTP und schützt zuverlässig vor Passwortdiebstahl.
0. Vor jeder Änderung: Backup anlegen
Bevor du etwas an SSH oder PAM änderst, immer zuerst Sicherungskopien erstellen:
sudo cp -a /etc/ssh/sshd_config /etc/ssh/sshd_config.$(date +%F.%H%M).bak
sudo cp -a /etc/pam.d/sshd /etc/pam.d/sshd.$(date +%F.%H%M).bak
So kannst du bei Problemen sofort zurückrollen, ohne dich auszusperren.
1. Google-Authenticator-Modul installieren
sudo apt update
sudo apt install libpam-google-authenticator
2. Benutzer registrieren
Führe das Setup nicht als root, sondern als dein SSH-Benutzer aus:
google-authenticator
Ablauf:
- QR-Code erscheint → mit deiner Authenticator-App scannen.
Die App zeigt jetzt alle 30 Sekunden einen neuen 6-stelligen Code an. - Testcode eingeben: Gib einmal den aktuell angezeigten Code ein, um zu prüfen, dass alles synchron ist.
- Danach folgen vier Sicherheitsfragen:
- „Do you want authentication tokens to be time-based?“ → y
- „Do you want to disallow multiple uses of the same token?“ → y
- „Do you want to increase the time window?“ → n
- „Do you want to enable rate-limiting?“ → y
Am Ende legt das Programm die Datei ~/.google_authenticator an.
Sie enthält dein Secret und die Backup-Codes.
3. PAM-Modul aktivieren
sudo nano /etc/pam.d/sshd
Am Ende der Datei hinzufügen:
auth required pam_google_authenticator.so
Wenn ein oder mehrere User von 2FA ausgenommen werden sollen, dann stattdessen bitte so:
auth [success=1 default=ignore] pam_succeed_if.so user in USERNAME1:USERNAME2
auth required pam_google_authenticator.so
Ich nutze das, um zum Beispiel Github-Runner (sshdeploy) ohne 2FA laufen zu lassen.
4. SSH konfigurieren
sudo nano /etc/ssh/sshd_config
Sicherstellen, dass nur diese Zeilen aktiv und nicht doppelt sind:
UsePAM yes
PasswordAuthentication yes
ChallengeResponseAuthentication yes
KbdInteractiveAuthentication yes
Syntax prüfen:
sudo sshd -t
Nur wenn keine Ausgabe erscheint:
sudo systemctl reload ssh
5. Testen
Öffne ein zweites Terminal (alte Sitzung nicht schließen):
ssh benutzer@server
Erwarteter Ablauf:
Password:
Verification code:
Funktioniert der zweite Prompt, ist dein 2FA aktiv.
6. Fazit
Diese Lösung kombiniert den Komfort des klassischen Passwort-Logins mit der Sicherheit moderner Zwei-Faktor-Authentifizierung:
- Kein Schlüsselmanagement nötig
- Zugriff von überall
- Hoher Schutz gegen Brute-Force und Passwortlecks
- Rückfallmöglichkeit dank vorheriger Backups
Wer so arbeitet, hat ein SSH-System, das einfach und gleichzeitig sicher(er) ist.
0 Kommentare