Simone Orsi
Tutti gli articoli
·sshyubikeysecuritydevops

SSH Agent Forwarding con chiavi FIDO2: Il PIN Mancante

Perché le YubiKey con verify-required falliscono con l'agent forwarding, e la soluzione di una riga che nessuno menziona.

Uso le chiavi FIDO2 per SSH e per firmare i commit git da un po', ma c'è una configurazione che mi ha fatto impazzire per giorni: far funzionare le chiavi verify-required con l'SSH agent forwarding.

Questo assume che ForwardAgent yes sia configurato per il tuo host in ~/.ssh/config.

La maggior parte della gente o rinuncia del tutto all'agent forwarding o disabilita il requisito del PIN. Entrambi sono compromessi terribili.

Il problema vero non è il forwarding in sé — è che quando la tua VM remota cerca di usare la tua chiave inoltrata, l'ssh-agent sulla tua macchina locale non ha modo di chiederti il PIN. L'agent fallisce con agent refused operation e tutti pensano che il forwarding sia rotto.

Quello che manca in tutte le guide che ho trovato: ti serve un sistema di dialogo GUI che funzioni anche quando la richiesta arriva da una macchina remota.

Il pezzo mancante

La soluzione è di una semplicità disarmante una volta che la sai: installa ssh-askpass e forza l'agent a usarlo.

brew tap theseal/ssh-askpass
brew install ssh-askpass

Poi dici alla tua shell di usarlo sempre:

export SSH_ASKPASS=ssh-askpass
export SSH_ASKPASS_REQUIRE=force

Adesso quando la tua VM cerca di firmare un commit git, il dialogo del PIN spunta sul tuo Mac — esattamente dove deve essere, visto che è lì che hai la YubiKey.

Perché conta

Senza questo setup, sei costretto a compromessi di sicurezza pessimi:

  • Copiare chiavi private sulle VM (vanifica tutto il senso delle chiavi hardware)
  • Disabilitare i requisiti del PIN (rende la tua chiave meno sicura)
  • Firmare i commit in locale e poi pushare (rompe i workflow collaborativi)
  • Usare chiavi separate per ambienti diversi (un incubo di gestione)

Con il forwarding fatto bene, il workflow diventa: la VM richiede una firma → dialogo PIN sul tuo Mac → tocchi la YubiKey → il commit firmato appare sulla VM. Il materiale della chiave privata non lascia mai il tuo token hardware, il PIN non attraversa mai la rete.

Cosa cambia

Una volta che hai questo che funziona, puoi firmare commit da qualsiasi VM o container tenendo le chiavi su hardware dedicato. Non devi più scegliere tra sicurezza e comodità.

Io uso questo setup per firmare commit in VM di sviluppo, ambienti CI, e anche container Docker. Il modello di sicurezza resta pulito: il token hardware non lascia mai la mia macchina, l'inserimento del PIN avviene in locale, ma gli artefatti firmati appaiono dove sto lavorando.

La parte frustrante è quanto sia semplice la soluzione una volta che sai che esiste. La maggior parte delle guide sull'SSH agent forwarding danno per scontate chiavi protette da password o ignorano FIDO2 del tutto. Il requisito di ssh-askpass per i token hardware con PIN è documentato praticamente da nessuna parte.

Se stai usando chiavi hardware e stai evitando l'agent forwarding per via dei prompt del PIN, prova questo setup. È la differenza tra compromettere il tuo modello di sicurezza e usarlo davvero ovunque.