Was Sie brauchen
- OpenSSH 8.2 oder neuer auf beiden Seiten. Diese Version hat die Schlüsseltypen
ed25519-skundecdsa-skeingeführt. Prüfen Sie Client und Server mitssh -V.verify-requiredbraucht 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
| Option | Was sie bewirkt |
|---|---|
-O verify-required | Jede Signatur braucht eine Nutzerverifikation, meist die PIN, zusätzlich zur Berührung. Ein gestohlener Token allein reicht dann nicht. |
-O resident | Speichert den Handle auf dem Token, sodass Sie ihn von einem anderen Computer nutzen können, ohne eine Datei zu kopieren. |
-O application=ssh:work | Vergibt 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-required | Signieren 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 liegt | In einer Datei auf Ihrem Computer | Auf dem Token |
| Nutzung auf einem neuen Computer | Handle-Datei kopieren | Vom Token herunterladen |
| Ein Dieb braucht | Den Token und die Datei | Den 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
- ssh-keygen(1), Abschnitt zu FIDO-Authentikatoren
- sshd(8), Optionen in authorized_keys
- OpenSSH-Release-Notes
- Securing SSH with FIDO2, Yubico
- Homebrew-Formel openssh