Come usare una YubiKey o una chiave FIDO2 con SSH (ed25519-sk)

Con la chiave hardware collegata, esegui ssh-keygen -t ed25519-sk -O verify-required e installa sul server il file .pub risultante come al solito. La chiave privata resta nel dispositivo, e ogni login richiede un tocco e un PIN. Client e server devono avere OpenSSH 8.2 o successivo, oppure 8.4 per verify-required. Le chiavi più vecchie senza supporto Ed25519 richiedono invece -t ecdsa-sk.

Aggiornata il . L'errore di macOS viene dal ssh-keygen incluso in macOS 27 (OpenSSH 10.3), e device not found da OpenSSH 10.0 su Debian 13 senza chiave collegata.

Cosa ti serve

  • OpenSSH 8.2 o successivo da entrambe le parti. Quella versione ha aggiunto i tipi di chiave ed25519-sk e ecdsa-sk. Controlla client e server con ssh -V. verify-required richiede la 8.4.
  • Una chiave che supporti Ed25519. Nello standard FIDO è facoltativo. Yubico dice che le YubiKey richiedono il firmware 5.2.3 o più recente. Sulle più vecchie, usa -t ecdsa-sk.
  • Una build di OpenSSH con supporto FIDO. Se usi un Mac, vedi la sezione seguente.

Per vedere se un server accetterà queste chiavi, esegui questo sul server e cerca sk-ssh-ed25519@openssh.com:

sudo sshd -T | grep -i pubkeyacceptedalgorithms

Su macOS l'ssh incluso non basta

L'ssh-keygen fornito con macOS ci ha dato questo:

No FIDO SecurityKeyProvider specified
Key enrollment failed: invalid format

La build di OpenSSH di Homebrew dipende da libfido2, che fornisce questo supporto. Installala e controlla che la tua shell trovi per prima quella versione:

brew install openssh
which ssh-keygen

Crea la chiave

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

Tocca la chiave quando lampeggia, e inserisci il suo PIN se richiesto. Ottieni due file:

  • ~/.ssh/id_ed25519_sk: l'handle. Sembra una chiave privata ma contiene solo un riferimento. Senza la chiave hardware è inutile.
  • ~/.ssh/id_ed25519_sk.pub: la chiave pubblica.

Se nessuna chiave è collegata, o il sistema non la vede, ottieni:

Key enrollment failed: device not found

Installala ed entra

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

La riga in authorized_keys funziona come qualsiasi altra, ma il suo tipo è sk-ssh-ed25519@openssh.com.

Le opzioni che contano

OpzioneCosa fa
-O verify-requiredOgni firma richiede la verifica dell'utente, di solito il PIN, oltre a un tocco. Un token rubato da solo allora non basta.
-O residentSalva l'handle sul token, così lo puoi usare da un altro computer senza copiare un file.
-O application=ssh:workImposta un nome per la chiave. Deve iniziare con ssh:. Utile per tenere più chiavi resident su un token.
-O no-touch-requiredFirma senza tocco. Il server deve consentirlo a sua volta, quindi lascialo disattivato a meno che tu abbia un motivo.

Resident o no

Non resident (predefinito)Resident
Dove sta l'handleIn un file sul tuo computerSul token
Uso su un computer nuovoCopia il file handleScaricalo dal token
A un ladro serveIl token e il fileIl token, e il PIN se ne hai impostato uno

Una chiave resident è comoda, ma chiunque abbia il token può recuperare l'handle, quindi abbinala a un PIN:

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

Su un altro computer, ottieni i file oppure carica la chiave direttamente nell'agent:

ssh-keygen -K
ssh-add -K

ssh-keygen -K scrive i file nella cartella corrente.

Richiedere il PIN lato server

Una chiave creata senza verify-required può comunque essere vincolata a questa opzione dal server. Aggiungi l'opzione all'inizio della sua riga in authorized_keys:

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

Prevedi il caso di un token perso

Se il token è perso, la chiave è persa. Registra due token, installa entrambe le chiavi pubbliche su ogni server e tieni il secondo in un posto sicuro. Tieni anche un'altra via d'accesso, come una console del tuo provider di hosting, prima di disattivare gli altri accessi.

Tieni i file handle, e la nota di quali server apre ogni token, in un unico posto come un gestore di chiavi SSH con vault cifrato.

Domande

La chiave privata può essere copiata fuori dalla YubiKey?

No. Secondo le note di rilascio di OpenSSH, la parte privata della chiave è unica per ogni token e non si può esportare. È anche il motivo per cui conviene registrare un secondo token come copia di riserva.

Mi serve ancora una passphrase?

È facoltativa. Il file handle da solo non basta senza il token, e un PIN con verify-required copre il caso di un token rubato. Una passphrase sul file handle aggiunge un altro passaggio, se la vuoi.

Posso usare la stessa YubiKey su più computer?

Sì. Con una chiave residente, esegui ssh-keygen -K sul nuovo computer per riprendere i file dal token. Con una chiave non residente, copia il file handle id_ed25519_sk sul nuovo computer. In entrambi i casi ogni accesso richiede comunque il token.

Fonti

Altro in Chiavi e accesso

Tutte le guide