Anleitungen

SSH-Key erstellen (ssh-keygen) und zum Login nutzen

ssh-keygen -t ed25519 erstellt in Minuten ein Schlüsselpaar. Warum ed25519 statt RSA, Passphrase setzen und den Key mit ssh-copy-id auf den Server kopieren.

Veröffentlicht ~9 Min. Lesezeit

Kurz gesagt: ssh-keygen -t ed25519 -C "du@example.com" erstellt ein Schlüsselpaar in ~/.ssh/ – einen privaten Schlüssel, den du behältst, und eine .pub-Datei, die du auf jeden Server kopierst. Drücke Enter, um den Standardpfad zu übernehmen, und vergib eine Passphrase, wenn du gefragt wirst; der Rest erklärt, warum, und was du mit dem Schlüssel danach machst.

Den Schlüssel erstellen

Linux · macOS · Windows (PowerShell, OpenSSH-Client seit Windows 10 enthalten)
ssh-keygen -t ed25519 -C "du@example.com"

# Generating public/private ed25519 key pair.
# Enter file in which to save the key (/home/du/.ssh/id_ed25519):
# Enter passphrase (empty for no passphrase):
# Enter same passphrase again:
# Your identification has been saved in /home/du/.ssh/id_ed25519
# Your public key has been saved in /home/du/.ssh/id_ed25519.pub

-C setzt einen Kommentar, der im öffentlichen Schlüssel gespeichert wird – meist eine E-Mail-Adresse oder der Name der Maschine, nur damit du Schlüssel später in der authorized_keys-Datei eines Servers unterscheiden kannst. Für die Sicherheit spielt er keine Rolle.

Welcher Schlüsseltyp: ed25519 oder RSA

ed25519RSA
SchlüsselgrößeFest, ~68 Byte öffentlicher SchlüsselVariabel; 4096 Bit empfohlen
GeschwindigkeitSchneller zu erzeugen und zu prüfenBei 4096 Bit deutlich langsamer
UnterstützungOpenSSH 6.5+ (2014) und neuer – praktisch überall aktuellUniversell, auch auf sehr alten Servern
EmpfehlungHeute die StandardwahlNur wenn ein Server zu alt für ed25519 ist
Falls ein Server alt genug ist, um RSA zu brauchen
ssh-keygen -t rsa -b 4096 -C "du@example.com"

Warum eine Passphrase setzen?

Eine Passphrase verschlüsselt die private Schlüsseldatei selbst – ohne sie kann jeder, der ~/.ssh/id_ed25519 von deiner Festplatte kopiert (ein gestohlener Laptop, ein durchgesickertes Backup, Malware, die dein Home-Verzeichnis liest), sich damit sofort und ohne die Passphrase zu kennen bei jedem Server anmelden, der dem Schlüssel vertraut. Mit gesetzter Passphrase ist diese Datei allein nutzlos.

ssh-agent: die Passphrase einmal pro Sitzung eingeben, nicht bei jeder Verbindung
eval "$(ssh-agent -s)"
ssh-add ~/.ssh/id_ed25519
ssh-add -l   # bestätigt, dass er geladen ist

Unter macOS speichert ssh-add --apple-use-keychain ~/.ssh/id_ed25519 die Passphrase in der Login-Keychain, sodass sie bei jeder neuen Sitzung automatisch geladen wird, nicht nur in der aktuellen.

Den öffentlichen Schlüssel auf einen Server kopieren

Der einfache Weg
ssh-copy-id user@203.0.113.10

ssh-copy-id meldet sich einmal mit deiner aktuellen Methode an (Passwort oder ein vorhandener Schlüssel), hängt deinen öffentlichen Schlüssel an ~/.ssh/authorized_keys auf dem Server an und korrigiert die Dateirechte, falls nötig – die drei Dinge, die für die Anmeldung per Schlüssel stimmen müssen.

Ohne ssh-copy-id (z. B. unter Windows oder auf einem minimalen Server-Image)
type $env:USERPROFILE\.ssh\id_ed25519.pub | ssh user@203.0.113.10 "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys"

Was authorized_keys erwartet

~/.ssh/authorized_keys — ein öffentlicher Schlüssel pro Zeile
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx du@laptop
Rechte, auf denen sshd besteht
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys

sshd vertraut authorized_keys nicht, wenn die Datei oder das .ssh-Verzeichnis für die Gruppe oder alle schreibbar ist – falsche Rechte sind einer der häufigsten Gründe, warum der Login per Schlüssel still auf ein Passwort zurückfällt.

Mit dem Schlüssel verbinden

Sobald der öffentliche Schlüssel auf dem Server liegt
ssh -i ~/.ssh/id_ed25519 user@203.0.113.10
# Liegt der Schlüssel am Standardpfad mit Standardnamen, brauchst du -i nicht:
ssh user@203.0.113.10

Windows mit PuTTY

PuTTY liest OpenSSHs Schlüsselformat nicht direkt – erzeuge den Schlüssel stattdessen in PuTTYgen (oder lade eine vorhandene id_ed25519-Datei über Conversions → Import key in PuTTYgen), speichere die .ppk-Datei und trage sie unter Connection → SSH → Auth → Credentials in PuTTY ein. Pageant, das mit PuTTY installiert wird, spielt dieselbe Rolle wie ssh-agent – lade den Schlüssel einmal pro Sitzung hinein, statt ihn bei jeder Verbindung zu entsperren.

Passwort-Login abschalten, sobald der Schlüssel funktioniert

Bestätige zuerst in einer zweiten, separaten Sitzung, dass der Schlüssel dich erfolgreich anmeldet, bevor du das hier anfasst – den Passwort-Login auszuschalten, während deine einzige funktionierende Sitzung genau die ist, die davon betroffen sein wird, ist der klassische Weg, sich selbst auszusperren:

/etc/ssh/sshd_config
PasswordAuthentication no
sudo systemctl restart sshd   # auf Debian/Ubuntu heißt der Dienst teils "ssh": systemctl restart ssh

Das ist nur ein Schritt einer größeren Absicherung – die vollständige Reihenfolge, in der du dich nicht aussperren kannst, steht in SSH-Zugriff absichern (engl.).

Schlüssel kopiert, aber trotzdem nach einem Passwort gefragt oder ganz abgelehnt? Sieh dir Permission denied (publickey) (engl.) an – meist steckt eine falsche Berechtigung oder ein falscher Pfad dahinter.

Häufige Fragen

Wie erstelle ich einen SSH-Key?

ssh-keygen -t ed25519 -C "du@example.com" ausführen, Enter drücken, um den Standardpfad zu übernehmen, und eine Passphrase vergeben. Das erzeugt einen privaten Schlüssel und eine passende .pub-Datei in ~/.ssh/.

ed25519 oder RSA – was soll ich nehmen?

ed25519 für alles Aktuelle – er ist schneller zu erzeugen und zu prüfen und wird seit OpenSSH 6.5 (2014) unterstützt, also praktisch überall. RSA mit -b 4096 nur, wenn du dich mit einem Server verbinden musst, der zu alt für ed25519 ist.

Brauche ich eine Passphrase für meinen SSH-Key?

Ja, für alles außer einem Wegwerf-Testkey. Ohne Passphrase kann jeder, der die private Schlüsseldatei von deiner Festplatte kopiert, sich damit sofort anmelden. ssh-agent lässt dich die Passphrase einmal pro Sitzung eingeben statt bei jeder Verbindung.