YubiKey oder FIDO2-Schlüssel mit SSH verwenden (ed25519-sk)

Führen Sie bei eingestecktem Hardware-Schlüssel ssh-keygen -t ed25519-sk -O verify-required aus und installieren Sie die entstandene .pub-Datei wie gewohnt auf dem Server. Der private Schlüssel bleibt auf dem Gerät, und jede Anmeldung braucht eine Berührung und eine PIN. Client und Server brauchen OpenSSH 8.2 oder neuer, für verify-required 8.4. Ältere Schlüssel ohne Ed25519-Unterstützung brauchen stattdessen -t ecdsa-sk.

Kein zweites OpenSSH auf dem Mac installieren? Wardterm erzeugt den Schlüssel direkt auf Ihrem YubiKey. Zeigen

Aktualisiert am . Der macOS-Fehler stammt vom ssh-keygen aus macOS 27 (OpenSSH 10.3), device not found von OpenSSH 10.0 unter Debian 13 ohne eingesteckten Schlüssel.

Was Sie brauchen

  • OpenSSH 8.2 oder neuer auf beiden Seiten. Diese Version hat die Schlüsseltypen ed25519-sk und ecdsa-sk eingeführt. Prüfen Sie Client und Server mit ssh -V. verify-required braucht 8.4.
  • Einen Schlüssel mit Ed25519-Unterstützung. Sie ist im FIDO-Standard optional. Yubico nennt für YubiKeys die Firmware 5.2.3 oder neuer. Bei älteren nutzen Sie -t ecdsa-sk.
  • Einen OpenSSH-Build mit FIDO-Unterstützung. Siehe den nächsten Abschnitt, falls Sie einen Mac nutzen.

Um zu sehen, ob ein Server diese Schlüssel akzeptiert, führen Sie dies auf dem Server aus und suchen nach sk-ssh-ed25519@openssh.com:

sudo sshd -T | grep -i pubkeyacceptedalgorithms

Unter macOS reicht das eingebaute ssh nicht

Das mit macOS gelieferte ssh-keygen gab uns dies:

No FIDO SecurityKeyProvider specified
Key enrollment failed: invalid format

Der Homebrew-Build von OpenSSH hängt von libfido2 ab, das diese Unterstützung liefert. Installieren Sie ihn und prüfen Sie, dass Ihre Shell zuerst diese Version findet:

brew install openssh
which ssh-keygen

Den Schlüssel erzeugen

ssh-keygen -t ed25519-sk -O verify-required -C "you@laptop"

Berühren Sie den Schlüssel, wenn er blinkt, und geben Sie seine PIN ein, falls gefragt. Sie erhalten zwei Dateien:

  • ~/.ssh/id_ed25519_sk: der Handle. Er sieht aus wie ein privater Schlüssel, enthält aber nur eine Referenz. Ohne den Hardware-Schlüssel ist er nutzlos.
  • ~/.ssh/id_ed25519_sk.pub: der öffentliche Schlüssel.

Ist kein Schlüssel eingesteckt oder sieht das System ihn nicht, erhalten Sie:

Key enrollment failed: device not found

Installieren und anmelden

ssh-copy-id -i ~/.ssh/id_ed25519_sk.pub user@server
ssh -i ~/.ssh/id_ed25519_sk user@server

Die Zeile in authorized_keys funktioniert wie jede andere, ihr Typ ist aber sk-ssh-ed25519@openssh.com.

Die wichtigen Optionen

OptionWas sie bewirkt
-O verify-requiredJede Signatur braucht eine Nutzerverifikation, meist die PIN, zusätzlich zur Berührung. Ein gestohlener Token allein reicht dann nicht.
-O residentSpeichert den Handle auf dem Token, sodass Sie ihn von einem anderen Computer nutzen können, ohne eine Datei zu kopieren.
-O application=ssh:workVergibt einen Namen für den Schlüssel. Er muss mit ssh: beginnen. Nützlich, um mehrere resident keys auf einem Token zu halten.
-O no-touch-requiredSignieren ohne Berührung. Der Server muss das ebenfalls erlauben, lassen Sie es also aus, wenn Sie keinen Grund haben.

Resident oder nicht

Nicht resident (Standard)Resident
Wo der Handle liegtIn einer Datei auf Ihrem ComputerAuf dem Token
Nutzung auf einem neuen ComputerHandle-Datei kopierenVom Token herunterladen
Ein Dieb brauchtDen Token und die DateiDen Token und die PIN, falls Sie eine gesetzt haben

Ein resident key ist bequem, aber jeder mit dem Token kann den Handle abrufen, kombinieren Sie ihn also mit einer PIN:

ssh-keygen -t ed25519-sk -O resident -O verify-required -C "you@laptop"

Auf einem anderen Computer holen Sie die Dateien oder laden den Schlüssel direkt in den Agent:

ssh-keygen -K
ssh-add -K

ssh-keygen -K schreibt die Dateien in das aktuelle Verzeichnis.

Eine PIN serverseitig verlangen

Ein ohne verify-required erzeugter Schlüssel kann vom Server trotzdem darauf verpflichtet werden. Fügen Sie die Option am Anfang seiner Zeile in authorized_keys ein:

verify-required sk-ssh-ed25519@openssh.com AAAA... you@laptop

Für einen verlorenen Token vorsorgen

Ist der Token weg, ist der Schlüssel weg. Richten Sie zwei Tokens ein, installieren Sie beide öffentlichen Schlüssel auf jedem Server und bewahren Sie den zweiten sicher auf. Halten Sie auch einen weiteren Zugang bereit, etwa eine Konsole Ihres Hosting-Anbieters, bevor Sie andere Anmeldungen abschalten.

Bewahren Sie die Handle-Dateien und eine Notiz, welche Server jedes Token öffnet, an einem Ort auf, etwa in einer SSH-Schlüsselverwaltung mit verschlüsseltem Vault.

Fragen

Kann der private Schlüssel vom YubiKey kopiert werden?

Nein. Laut den OpenSSH-Release-Notes ist der private Teil des Schlüssels für jeden Token einzigartig und nicht exportierbar. Deshalb sollten Sie auch einen zweiten Token als Backup einrichten.

Brauche ich weiterhin eine Passphrase?

Sie ist optional. Die Handle-Datei reicht ohne den Token nicht aus, und eine PIN mit verify-required deckt den Fall eines gestohlenen Tokens ab. Eine Passphrase auf der Handle-Datei fügt einen weiteren Schritt hinzu, falls Sie das möchten.

Kann ich denselben YubiKey an mehreren Computern nutzen?

Ja. Bei einem residenten Schlüssel holen Sie die Dateien auf dem neuen Computer mit ssh-keygen -K vom Token. Bei einem nicht residenten Schlüssel kopieren Sie die Handle-Datei id_ed25519_sk auf den neuen Computer. In beiden Fällen braucht jede Anmeldung weiterhin den Token.

Quellen

Mehr zu Schlüssel und Anmeldung

Alle Anleitungen