Cosa ti serve
- OpenSSH 8.2 o successivo da entrambe le parti. Quella versione ha aggiunto i tipi di chiave
ed25519-skeecdsa-sk. Controlla client e server conssh -V.verify-requiredrichiede 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
| Opzione | Cosa fa |
|---|---|
-O verify-required | Ogni firma richiede la verifica dell'utente, di solito il PIN, oltre a un tocco. Un token rubato da solo allora non basta. |
-O resident | Salva l'handle sul token, così lo puoi usare da un altro computer senza copiare un file. |
-O application=ssh:work | Imposta un nome per la chiave. Deve iniziare con ssh:. Utile per tenere più chiavi resident su un token. |
-O no-touch-required | Firma 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'handle | In un file sul tuo computer | Sul token |
| Uso su un computer nuovo | Copia il file handle | Scaricalo dal token |
| A un ladro serve | Il token e il file | Il 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
- ssh-keygen(1), sezione sull'autenticatore FIDO
- sshd(8), opzioni di authorized_keys
- Note di rilascio di OpenSSH
- Securing SSH with FIDO2, Yubico
- Formula openssh di Homebrew