Ein SSH-Login kann ebenfalls durch 2FA mittels U2F FIDO2-Token abgesichert werden. In einem solchen Umfeld kann der Zielserver nur erreicht werden, wenn auf dem Client-Rechner (SSH-Client) das hinterlegte Token eingesteckt und aktiviert wird.

Das Verfahren ist analog zu dem klassischen SSH-Public/Private-Key Verfahren, nur dass in diesem Fall der Private Key durch das Token und einer entsprechenden Kommunikation zwischen Server und Client ersetzt wird.

Ziel ist hier wiederum durch ein "Besitz"-Objekt einen sensiblen Zugriff zu schützen

Voraussetzung:

  • Auf dem Ziel-Server muss ein openssh-Server der Version 8.2 oder höher laufen, wie auch auf dem Client ein openssh-client Version 8.2 oder höher installiert sein. Erst ab dieser Version werden die notwendigen Keys unterstützt. Die Distribution Ubuntu enthält diese seit der Version 20.04 LTS.
  • Ein FIDO2-kompatibles U2F-Token (Yubikey, Winkeo-A FIDO2, …) ist am Client eingesteckt

Generierung des Schlüsselpaares:

Die Generierung erfolgt auf dem Client, in dem Das U2F-Token eingesteckt ist.

Hier wird ssh-keygen verwendet, um das Schlüsselpaar zu generieren.

Beispiel:
 

$ ssh-keygen -t ecdsa-sk
Generating public/private ecdsa-sk key pair.
You may need to touch your authenticator to authorize key generation.
Enter file in which to save the key (/home/XXXXXX/.ssh/id_ecdsa_sk):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/XXXXXX/.ssh/id_ecdsa_sk
Your public key has been saved in /home/XXXXXX/.ssh/id_ecdsa_sk.pub
The key fingerprint is:

SHA256:XXXXXXXXXXXXXXXXXXXXXXXXXXXXX XXXXXX@my-server

The key's randomart image is:
+-[ECDSA-SK 256]--+
...
+----[SHA256]-----+

 

Für die Generierung muss das Touch-Feld des Tokens berührt werden.

Sofern nichts anderes angegeben wird, entstehen hieraus 2 Dateien, die im eigenen ".ssh" Verzeichnis abgelegt werden:

id_ecdsa_sk
id_ecdsa_sk.pub

 

Übertragung zum Ziel-Server

Ist der Ziel-Server noch per Passwort erreichbar, kann der Befehl "ssh-copyid" verwendet werden:

ssh-copy-id -i ~/.ssh/id_ecdsa_sk.pub user@zielserver

 

Alternativ kann der Inhalt dieser Datei auch manuell auf dem Zielserver in die Datei  "~/.ssh/authorized_keys" eingetragen werden, also analog zu dem klassischen Verfahren.

Authentifizierung

Wird nun SSH verwendet, um den Ziel-Server zu erreichen, wird das Token und der U2F-Key erwartet:

$ ssh root@my-server

Confirm user presence for key ECDSA-SK SHA256:XXXXXXXXXXXXXXXXXXXXXXXXXXXXX

User presence confirmed

Linux my-server 5.15.76-v8+ #1597 SMP PREEMPT Fri Nov 4 12:16:41 GMT 2022 aarch64

 

Ab diesem Zeitpunkt können andere Authentifizierungsverfahren abgeschaltet werden. Es empfiehlt sich natürlich ein zweites Token entsprechend einzurichten, um den Fall des Verlustes oder Defektes abzudecken.