Key-based SSH Login: Das ultimative Tutorial für passwortloses SSH
In der Welt der Linux-Administration und DevOps ist Sicherheit und Effizienz entscheidend. Die passwortlose Authentifizierung via SSH (Secure Shell) bietet nicht nur einen höheren Schutz gegen Brute-Force-Angriffe, sondern ist auch die Voraussetzung für Automatisierungen (z. B. mit Ansible, Jenkins oder GitHub Actions).
In diesem Tutorial lernst du, wie du ein SSH-Schlüsselpaar erstellst, es auf einen Server überträgst und den Login absicherst.
1. Funktionsweise verstehen
Das Verfahren basiert auf Asymmetrischer Kryptografie:
- Private Key (Privater Schlüssel): Verbleibt sicher auf deinem lokalen Rechner. Gib ihn niemals weiter!
- Public Key (Öffentlicher Schlüssel): Wird auf den Zielserver kopiert.
- Der Clou: Der Server verschlüsselt eine Nachricht mit deinem Public Key, die nur du mit deinem Private Key entschlüsseln kannst. So beweist du deine Identität ohne Passwort.
Schritt 1: SSH-Schlüsselpaar lokal generieren
Öffne dein Terminal (Linux/macOS) oder die PowerShell (Windows). Wir verwenden den modernen ED25519-Algorithmus, da dieser schneller und sicherer als RSA ist.
ssh-keygen -t ed25519 -C "deine_email@example.com"
Was passiert jetzt?
- Dateipfad: Du wirst gefragt, wo der Schlüssel gespeichert werden soll (Standard:
~/.ssh/id_ed25519). Bestätige mitEnter. - Passphrase: Du kannst optional ein Passwort für den Schlüssel selbst vergeben. Das erhöht die Sicherheit, falls dein lokaler Rechner gestohlen wird. Für volle Automatisierung lässt man dies oft leer.
Schritt 2: Den Public Key auf den Server übertragen
Nun müssen wir den öffentlichen Teil des Schlüssels auf den Remote-Server kopieren.
Methode A: Der einfache Weg (ssh-copy-id)
Dies ist das Standard-Tool unter Linux und macOS:
ssh-copy-id benutzername@server-ip
(Du wirst einmalig nach deinem aktuellen Passwort auf dem Server gefragt.)
Methode B: Der manuelle Weg (falls ssh-copy-id fehlt)
Falls das Tool nicht verfügbar ist, kannst du den Key manuell in die Datei ~/.ssh/authorized_keys auf dem Server einfügen:
cat ~/.ssh/id_ed25519.pub | ssh benutzername@server-ip "mkdir -p ~/.ssh && chmod 700 ~/.ssh && cat >> ~/.ssh/authorized_keys && chmod 600 ~/.ssh/authorized_keys"
Schritt 3: Den passwortlosen Login testen
Versuche nun, dich einzuloggen:
ssh benutzername@server-ip
Wenn alles korrekt konfiguriert wurde, wirst du sofort eingeloggt (oder nach der Passphrase deines Keys gefragt), ohne das Benutzerpasswort des Servers einzugeben.
Schritt 4: Sicherheit erhöhen (Passwort-Login deaktivieren)
Um die Sicherheit deines Servers massiv zu steigern, solltest du den normalen Passwort-Login komplett deaktivieren. So haben Hacker keine Chance mehr mit Brute-Force-Angriffen.
Achtung: Stelle sicher, dass der Key-Login funktioniert, bevor du diesen Schritt ausführst!
-
Öffne die SSH-Konfigurationsdatei auf dem Server:
sudo nano /etc/ssh/sshd_config -
Suche folgende Zeilen und ändere sie wie folgt ab:
PasswordAuthentication no PubkeyAuthentication yes ChallengeResponseAuthentication no -
Speichere die Datei (
Ctrl+O,Enter) und beende den Editor (Ctrl+X). -
Starte den SSH-Dienst neu, um die Änderungen zu übernehmen:
sudo systemctl restart ssh
Bonus: Komfort durch die SSH-Config-Datei
Anstatt immer ssh benutzername@123.456.78.9 zu tippen, kannst du Shortcuts anlegen. Erstelle lokal die Datei ~/.ssh/config:
nano ~/.ssh/config
Füge folgenden Inhalt hinzu:
Host meinserver
HostName 123.456.78.9
User benutzername
IdentityFile ~/.ssh/id_ed25519
Jetzt reicht ein einfaches:
ssh meinserver
Zusammenfassung für DevOps
- Key-Generation:
ssh-keygen -t ed25519 - Transfer:
ssh-copy-id - Hardening:
PasswordAuthentication noin/etc/ssh/sshd_config - Vorteil: Sicherer Zugriff und bereit für Automatisierungstools wie Ansible oder Terraform.