Auf der Suche nach der Möglichkeit meinen SSH-Schlüssel zusätzlich mit meinem YubiKey abzusichern bin ich im Netz auf viele veraltete Informationen gestoßen.

Dabei funktioniert das mit einer aktuellen OpenSSH-Version sehr einfach.

TLDR:
ssh-keygen -t ed25519-sk

Vorrausetzungen:

  • OpenSSH >= 8.1 (ab Debian 11)
  • YubiKey oder anderen FIDO-Schlüssel

Schlüsselgenerierung

Bei der SSH-Schlüsselgenerierung mit ssh-keygen gibt es zwei neue Schlüsseltypen:

    Der Sicherheitsschlüssel muss am Rechner angeschlossen sein, zur Schlüssel-Generierung kann dann dieser Befehl genutzt werden:

    rbs@pingvit:~$ ssh-keygen -t ed25519-sk

    Wir werden nun aufgefordert unseren Schlüssel zu berühren:

    Generating public/private ed25519-sk key pair.
    You may need to touch your authenticator to authorize key generation.

    Danach werden wir wie üblich gefragt wo der Schlüssel gespeichert werden soll, in meinem Fall wird der Schlüssel nur für Testzwecke erzeugt und deshalb in /tmp gespeichert. Im Normalfall ist ~/.ssh/ der richtige Platz. Einfaches Bestätigen mit Enter übernimmt den Standardwert (hier: /home/rbs/.ssh/id_ed25519_sk).

    Enter file in which to save the key (/home/rbs/.ssh/id_ed25519_sk): /tmp/id_ed25519_sk

    Als nächste kann ein zusätzliches Passwort für den Schlüssel vergeben werden. Dieses wird dann bei jeder Nutzung zusätzlich zum Sicherheitsschlüssel abgefragt. Simples Bestätigen mit Enter setzt kein Passwort.

    Enter passphrase (empty for no passphrase): 
    Enter same passphrase again: 
    

    Unser Schlüssel wurde nun generiert:

    Your identification has been saved in /tmp/id_ed25519_sk
    Your public key has been saved in /tmp/id_ed25519_sk.pub
    The key fingerprint is:
    SHA256:AdEQ+z5Kkb1jZHgeJIb+XEaHg4e6gYMiIrk5l1WRmbU rbs@pingvit
    The key's randomart image is:
    +[ED25519-SK 256]-+
    |      *X.        |
    |     .+*.o       |
    |    . B E .      |
    | o o + X +       |
    |B o = + S        |
    |=o + = X o       |
    |+ o . + B        |
    | o   . o o       |
    |      .          |
    +----[SHA256]-----+

    Nutzung des neuen Schlüssels

    Um den Schlüssel zum Login auf einem Server zu nutzen muss dieser in der .ssh/authorized_hosts hinterlegt werden. Dies kann man manuell oder mit dem Befehl ssh-copy-id erledigen:

    rbs@pingvit:~$ ssh-copy-id -i /tmp/id_ed25519_sk.pub root@server
    /usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/tmp/id_ed25519_sk.pub"
    /usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
    /usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
    
    Number of key(s) added: 1
    
    Now try logging into the machine, with:   "ssh 'root@server'"
    and check to make sure that only the key(s) you wanted were added.

    Bei einem Login wird nun der Sicherheitsschlüssel abgefragt:

    rbs@pingvit:~$ ssh root@server -i /tmp/id_ed25519_sk
    Confirm user presence for key ED25519-SK SHA256:AdEQ+z5Kkb1jZHgeJIb+XEaHg4e6gYMiIrk5l1WRmbU

    Eventuell ist aber auch noch ein alter Schlüssel vorhanden der ein Login ohne FIDO-Key ermöglicht. Dieser sollte dann aus der authorized_hosts-Datei entfernt werden.

    Ich hoffe die Anleitung hilft dem ein oder anderen weiter. Im Netz kursieren leider noch viele veraltete Anleitungen mit wesentlich komplexeren Schritten. Diese hatten mich anfangs etwas abgeschreckt.

    Titelbild von Filip Szalbot auf Unsplash

    Categories:

    Noch keine Kommentare

    Schreibe einen Kommentar

    Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert