von Thomas
Erstellt am 26.02.2020
Letztes Update am 17.11.2021
Mit der Version OpenSSH 8.2 kommt der Support für U2F/FIDO. Somit ist es möglich ein SSH Schlüsselpaar zum Login auf einem Server, mit einem Security Token abzusichern. Im Fachjargon wird das 2-Faktor-Authentifizierung (2FA) genannt. Der Vorteil ist, dass das SSH Schlüsselpaar beim Erstellungsprozess mit dem FIDO Stick verschlüsselt wird und sich auch nur mit genau dem Stick wieder verwenden lässt. Sollte ein Angreifer an den privaten Schlüssel des Paars kommen, ist dieser ohne den Token nutzlos. Der private Schlüssel lässt sich nur mit Betätigen des Security Token nutzen.
ssh -V
Das aktuelle Arch Linux bringt OpenSSH schon in der neusten benötigten Version mit:
OpenSSH_8.8p1, OpenSSL 1.1.1l 24 Aug 2021
Mit Debian 11 ist Version 8.4p1 eingeganngen, sodass Debian 11 die Funktion ebenfalls unterstützt:
OpenSSH_8.4p1 Debian-5, OpenSSL 1.1.1k 25 Mar 2021
Bei älteren Systemen, wie Ubuntu, Debian, BSD empfehle ich folgende Installationen:
ssh-keygen -t ecdsa-sk -f ~/.ssh/id_ecdsa_sk Generating public/private ecdsa-sk key pair. You may need to touch your authenticator to authorize key generation.
Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in /home/user/.ssh/id_ecdsa_sk Your public key has been saved in /home/user/.ssh/id_ecdsa_sk.pub
Anschließend muss der Public Key auf den Server gepusht werden:
ssh-copy-id -i ~/.ssh/id_ecdsa_sk.pub user@<your-IP-or-domain>
Nun können wir das neu erzeugte Schlüsselpaar verwenden (beachtet das der Server ebenfalls Openssh Version 8.2 oder höher verwenden muss):
ssh user@<your-IP-or-domain>
Durch betätigen des Keys loggen wir uns automatisch ein.
Benutzen wir die Option -v können wir die Gegenseite kontrollieren, ob sie die gleiche Version wie wir unterstützt. Dabei müssen wir auf folgenden Zeilen achten:
debug1: Local version string SSH-2.0-OpenSSH_8.2 debug1: Remote protocol version 2.0, remote software version OpenSSH_8.2 debug1: match: OpenSSH_8.2 pat OpenSSH* compat 0x04000000
Die Authentifizierung kann wie folgt kontrolliert werden:
debug1: Offering public key: /home/user/.ssh/id_ecdsa_sk ECDSA-SK SHA256:48ymh350lq9ytm44mutgjpimbi6lbj8klkjg8z62ewb6fugtng authenticator agent debug1: Server accepts key: /home/user/.ssh/id_ecdsa_sk ECDSA-SK SHA256:48ymh350lq9ytm44mutgjpimbi6lbj8klkjg8z62ewb6fugtng authenticator agent debug1: Authentication succeeded (publickey).
Prinzipiell kann jeder Stick der FIDO U2F unterstützt verwendet werden. Folgende Hersteller bieten solche Sticks an:
Wichtig zu beachten ist, dass der Private SSH Schlüssel nur mit dem FIDO Security Token verwendbar ist. Sollte der Stick abhanden kommen kann der Private Schlüssel nicht mehr genutzt werden. Meines Wissens ist es aktuell nicht möglich Recoverycodes oder ähnliches zu erstellen. Eine Lösung wäre einen zweiten FIDO Stick als Backup zu verwenden. So müssten jedoch immer beide Keys auf den zu verbindenden Server gepusht werden.