SSH-Key-Login unter Debian einrichten

Ein sicher eingerichteter SSH-Zugang ist wichtig, wenn ein Debian-Server im Netzwerk erreichbar ist. Besonders empfehlenswert ist die Anmeldung per SSH-Key, weil sie deutlich sicherer ist als ein normaler Passwort-Login. In diesem Artikel wird erklärt, wie man zunächst einen temporären Rettungsmodus aktiviert, den SSH-Key von Windows auf dem Debian-Server hinterlegt und danach den Passwort-Login endgültig deaktiviert.
Am Ende kannst du dich von Windows per ssh anmelden ohne Debian-Passwort.
Wichtig: Wir bauen vorher einen kleinen Rescue-Fallback ein. Falls etwas schiefgeht, kannst du dich über die VMware-Konsole wieder einloggen und SSH wieder reparieren. Sonst sperrt man sich aus.
Voraussetzungen
Du brauchst:
- Windows 11
- PowerShell
- Debian-Server oder Debian-VM
- SSH-Server auf Debian
- Benutzer auf Debian, hier im Beispiel:
rubinhood - Zugriff auf die Debian-Konsole z.B. über VMware
In meinem Beispiel hat die Debian-VM diese IP-Adresse:
192.168.178.37
Der Benutzer heißt:
rubinhood
IP-Adresse von Debian finden
Zuerst melden wir uns direkt an der Debian-Konsole an, zum Beispiel über VMware.
Danach geben wir ein:
hostname -I
Debian zeigt dann die IP-Adressen an.
In meinem Beispiel ist die wichtige IP:
192.168.178.37
Diese IP brauchen wir später für die SSH-Verbindung von Windows.

Rescue-Konfiguration anlegen
Jetzt legen wir eine eigene SSH-Konfigurationsdatei an.
Diese Datei nutzen wir als eine Art Sicherheitsschalter. Erst erlauben wir Passwort-Login noch, damit wir nicht ausgesperrt werden. Später schalten wir Passwort-Login sauber ab.
Befehl auf Debian:
sudo nano /etc/ssh/sshd_config.d/99-rescue.conf
Achtung: Der Pfad muss genau so geschrieben werden:
/etc/ssh/sshd_config.d/99-rescue.conf
Nicht ssh_config.d, sondern sshd_config.d.

Datei ist in nano geöffnet
Jetzt ist die Datei in nano geöffnet.
Falls die Datei leer ist, ist das normal.

Rescue-Einstellungen eintragen
Trage diese Zeilen ein:
PasswordAuthentication yes
KbdInteractiveAuthentication yes
PubkeyAuthentication yes
PermitRootLogin no
Bedeutung:
PasswordAuthentication yes
Passwort-Login ist vorerst erlaubt.
KbdInteractiveAuthentication yes
Interaktive Passwortabfrage ist ebenfalls erlaubt.
PubkeyAuthentication yes
SSH-Key-Login ist erlaubt.
PermitRootLogin no
Root darf sich nicht direkt per SSH anmelden. Das ist gut so. Root direkt ins Netzwerk zu stellen ist ungefähr wie Haustür offenlassen und hoffen, dass alle nett sind.
Speichern in nano:
Strg + O
Enter
Strg + X

SSH-Dienst neu starten
Damit Debian die neue SSH-Konfiguration übernimmt, starten wir SSH neu:
sudo systemctl restart ssh
Wenn keine Fehlermeldung kommt, ist alles gut.

Von Windows per Passwort testen
Jetzt öffnen wir auf Windows 11 die PowerShell.
Dann verbinden wir uns testweise noch mit Passwort:
ssh rubinhood@192.168.178.37
Danach Passwort eingeben.
Wenn du auf Debian landest und so etwas siehst:
rubinhood@oxlab:~$
dann funktioniert SSH grundsätzlich.
Diese Sitzung am besten offen lassen. Noch nicht schließen. Sicherheitsnetz und so.

SSH-Key auf Windows erstellen
Jetzt erstellen wir auf Windows einen SSH-Key.
In PowerShell:
ssh-keygen -t ed25519
Dann einfach mit Enter bestätigen:
Enter file in which to save the key:
Einfach Enter.
Bei der Passphrase kannst du für ein Labor-System leer lassen:
Enter passphrase:
Einfach Enter.
Noch einmal:
Enter same passphrase again:
Wieder Enter.
Danach liegen die Dateien hier:
C:\Users\user\.ssh\id_ed25519
C:\Users\user\.ssh\id_ed25519.pub
Wichtig:
id_ed25519ist der private Schlüsselid_ed25519.pubist der öffentliche Schlüssel
Den privaten Schlüssel niemals weitergeben. Wirklich niemals. Das ist nicht „nur eine Datei“, das ist dein digitaler Wohnungsschlüssel.

Public Key in die Zwischenablage kopieren
Jetzt kopieren wir den öffentlichen Schlüssel in die Zwischenablage.
In PowerShell:
type $env:USERPROFILE\.ssh\id_ed25519.pub | clip
Damit ist der Inhalt von id_ed25519.pub kopiert.

Public Key in Debian einfügen
Jetzt wechseln wir zurück zur SSH-Sitzung oder zur Debian-Konsole.
Als Benutzer rubinhood erstellen wir den .ssh-Ordner:
mkdir -p ~/.ssh
Dann öffnen wir die Datei authorized_keys:
nano ~/.ssh/authorized_keys
Jetzt den kopierten Public Key einfügen.
Der Key muss in einer einzigen langen Zeile stehen, zum Beispiel so:
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIAE... rubinhood@WINDOWS-RK1E5UE

Speichern:
Strg + O
Enter
Strg + X
Danach setzen wir noch die richtigen Rechte:
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys
Das ist wichtig.
Passwort-Login deaktivieren
Jetzt kommt der wichtige Teil.
Öffne wieder die Rescue-Datei:
sudo nano /etc/ssh/sshd_config.d/99-rescue.conf
Ändere den Inhalt auf:
PasswordAuthentication no
KbdInteractiveAuthentication no
PubkeyAuthentication yes
PermitRootLogin no
Jetzt ist Passwort-Login deaktiviert.
Speichern:
Strg + O
Enter
Strg + X
SSH neu starten:
sudo systemctl restart ssh
Wichtig: Die bestehende SSH-Sitzung noch nicht schließen.

Finaler Test ohne Passwort
Jetzt öffnen wir ein neues PowerShell-Fenster und testen die Verbindung:
ssh rubinhood@192.168.178.37
Wenn alles richtig ist, wirst du ohne Debian-Passwort angemeldet.
Falls du beim Key eine Passphrase gesetzt hast, fragt Windows nach dieser Passphrase. Das ist normal.
Wenn du wieder hier landest:
rubinhood@oxlab:~$
funktioniert der SSH-Key-Login.
Der Passwort-Login ist jetzt deaktiviert.

Zusammenfassung
Wir haben:
- die IP-Adresse der Debian-VM gefunden
- eine SSH-Rescue-Datei angelegt
- SSH-Key-Login aktiviert
- auf Windows einen ED25519-Key erstellt
- den Public Key nach Debian kopiert
- den Key in
authorized_keyseingetragen - Passwort-Login deaktiviert
- den finalen SSH-Key-Login getestet
Damit ist der Debian-Server deutlich sicherer erreichbar als vorher. Nicht perfekt gegen alles, aber deutlich besser als „Passwort rein und hoffen, dass das Internet heute nett ist“.