Schlüssel erzeugen
Prüfen Sie zuerst mit ls ~/.ssh, ob Sie schon einen haben. Liegt dort id_ed25519.pub, springen Sie direkt zur Installation.
ssh-keygen -t ed25519 -C "you@laptop"
ssh-keygen stellt zwei Fragen:
Generating public/private ed25519 key pair.
Enter file in which to save the key (/home/you/.ssh/id_ed25519):
Enter passphrase for "/home/you/.ssh/id_ed25519" (empty for no passphrase):
Enter same passphrase again:
Übernehmen Sie mit der Eingabetaste die Standarddatei. Gibt es dort schon einen Schlüssel, geben Sie einen anderen Pfad wie ~/.ssh/id_ed25519_work ein, statt ihn zu überschreiben.
Der Text nach -C ist ein Kommentar, an dem Sie den Schlüssel später erkennen. Jeder, der den öffentlichen Schlüssel sieht, kann ihn lesen, also schreiben Sie nichts Privates hinein. Seit OpenSSH 9.5 erzeugt auch ein einfaches ssh-keygen einen Ed25519-Schlüssel, -t ed25519 funktioniert aber mit jeder Version.
Eine Passphrase wählen
Die Passphrase verschlüsselt die Datei mit dem privaten Schlüssel. Ohne sie kann jeder, der die Datei kopiert, den Schlüssel nutzen. Mit ihr braucht er zusätzlich die Passphrase. Sie können sie später hinzufügen oder ändern, ohne den Schlüssel zu ändern:
ssh-keygen -p -f ~/.ssh/id_ed25519
Damit Sie sie nicht bei jeder Verbindung eingeben, laden Sie den Schlüssel in den ssh-agent, wie weiter unten beschrieben.
Öffentlichen Schlüssel auf einem Server installieren
ssh-copy-id -i ~/.ssh/id_ed25519.pub user@server
Der Befehl meldet sich einmal mit Ihrem Passwort an, hängt den öffentlichen Schlüssel an ~/.ssh/authorized_keys auf dem Server an und setzt die richtigen Rechte. Fehlt ssh-copy-id, geht es auch von Hand:
cat ~/.ssh/id_ed25519.pub | ssh user@server 'mkdir -p ~/.ssh && chmod 700 ~/.ssh && cat >> ~/.ssh/authorized_keys && chmod 600 ~/.ssh/authorized_keys'
Unter Windows hat PowerShell kein ssh-copy-id, und der Schlüssel liegt in Ihrem Benutzerprofil:
type $env:USERPROFILE\.ssh\id_ed25519.pub | ssh user@server "mkdir -p ~/.ssh && chmod 700 ~/.ssh && cat >> ~/.ssh/authorized_keys && chmod 600 ~/.ssh/authorized_keys"
Mehr dazu unter ssh-copy-id unter Windows.
Testen
Dieser Befehl probiert nur Schlüssel aus und klappt deshalb nur, wenn der Schlüssel funktioniert:
ssh -o PreferredAuthentications=publickey user@server
Testen Sie nicht nur mit -o PasswordAuthentication=no. Erlaubt der Server die Anmeldung per keyboard-interactive, kann er auf diesem Weg trotzdem nach Ihrem Passwort fragen, und Sie würden glauben, der Schlüssel habe funktioniert.
Schlägt es fehl, lesen Sie Permission denied (publickey) beheben.
Öffentlichen Schlüssel für GitHub und andere Dienste kopieren
pbcopy < ~/.ssh/id_ed25519.pub # macOS
cat ~/.ssh/id_ed25519.pub # Linux: copy the output
Unter Windows nutzen Sie Get-Content $env:USERPROFILE\.ssh\id_ed25519.pub | Set-Clipboard. Der öffentliche Schlüssel ist eine einzige Zeile, die mit ssh-ed25519 beginnt. Sehen Sie -----BEGIN OPENSSH PRIVATE KEY-----, haben Sie den privaten Schlüssel geöffnet: Fügen Sie ihn nirgends ein.
Die nächsten Schritte für GitHub stehen in SSH-Schlüssel zu GitHub hinzufügen.
Passphrase nicht mehr eintippen
Der ssh-agent hält den entsperrten Schlüssel für Ihre Sitzung im Speicher:
ssh-add ~/.ssh/id_ed25519
ssh-add -l
Auf dem Mac kann die Passphrase auch über einen Neustart hinweg im Schlüsselbund bleiben: siehe ssh-agent und der macOS-Schlüsselbund. Antwortet ssh-add mit Could not open a connection to your authentication agent, läuft in dieser Shell kein Agent: siehe diesen Fehler beheben.
Einen Schlüssel mit anderem Namen nutzen
Die Standardnamen wie id_ed25519 probiert ssh von selbst. Einen Schlüssel mit anderem Namen geben Sie einmalig mit -i an:
ssh -i ~/.ssh/id_ed25519_work user@server
Oder Sie weisen ihn dem Server in ~/.ssh/config zu, dann genügt ssh myserver:
Host myserver
HostName 203.0.113.10
User user
IdentityFile ~/.ssh/id_ed25519_work
IdentitiesOnly yes
Den Rest dieser Datei erklärt die Anleitung zur SSH-Konfigurationsdatei.
Warum ed25519
Ed25519-Schlüssel sind kurz, schnell und werden von jeder OpenSSH-Version seit 6.5 aus dem Jahr 2014 unterstützt. Nutzen Sie RSA nur für ein altes System oder Gerät, das ed25519 nicht kennt, und dann mit mindestens 3072 Bit:
ssh-keygen -t rsa -b 4096 -C "you@laptop"
Einen direkten Vergleich finden Sie unter RSA oder ed25519.
Fingerprint eines Schlüssels anzeigen
ssh-keygen -lf ~/.ssh/id_ed25519.pub
Den Fingerprint vergleichen Sie, um zu prüfen, ob zwei Kopien eines Schlüssels gleich sind, zum Beispiel der bei GitHub gelistete Schlüssel und der auf Ihrem Laptop.
Fragen
Wo liegt mein SSH-Schlüssel?
Im Ordner .ssh Ihres Home-Verzeichnisses: ~/.ssh unter macOS und Linux, unter Windows der Ordner .ssh in Ihrem Benutzerprofil. id_ed25519 ist der private Schlüssel, id_ed25519.pub der öffentliche.
Ist ed25519 besser als RSA?
Für neue Schlüssel ja. Ed25519-Schlüssel sind kürzer und schneller, und jedes aktuelle OpenSSH unterstützt sie. Nutzen Sie RSA mit mindestens 3072 Bit nur für alte Systeme, die ed25519 nicht kennen.
Brauche ich die Optionen -o und -a 100 aus älteren Anleitungen?
Nein. -o wird akzeptiert, bewirkt aber nichts mehr: Das OpenSSH-Format, das es verlangte, ist seit OpenSSH 7.8 Standard. -a legt fest, wie viele Runden die Passphrase schützen, standardmäßig 16. Mehr Runden bremsen jeden, der sie erraten will, und machen das Entsperren für Sie etwas langsamer.
Ich habe meine Passphrase vergessen. Kann ich sie wiederherstellen?
Nein. Sie lässt sich weder auslesen noch zurücksetzen. Erzeugen Sie einen neuen Schlüssel, installieren Sie dessen öffentlichen Schlüssel auf Ihren Servern und entfernen Sie den alten aus deren authorized_keys.
Kann ich denselben Schlüssel auf mehreren Servern nutzen?
Ja. Der öffentliche Schlüssel kann auf beliebig vielen Servern liegen. Nutzen Sie getrennte Schlüssel, wo Sie Zugriffe getrennt entziehen wollen, etwa für berufliche und private Server.
Quellen
- ssh-keygen(1), OpenBSD-Handbuch
- ssh-add(1), OpenBSD-Handbuch
- ssh-copy-id(1), Linux-Manpages
- Versionshinweise zu OpenSSH 9.5
- Versionshinweise zu OpenSSH 6.5