SSH OTP

Aggiungi codici monouso basati sul tempo all'accesso SSH utilizzando Linux PAM e il modulo PAM di Google Authenticator.

Prima di eseguire

Questo esempio di Ubuntu installa un modulo PAM aggiuntivo e modifica l'autenticazione del server. Mantieni aperta una sessione amministrativa esistente e una console indipendente o un accesso di ripristino. Configurare e testare ciascun account prima dell'applicazione; conservare in modo sicuro i codici segreti e di emergenza OTP e non pubblicarli mai. Sincronizza l'orologio del server. Verifica che il tuo client SSH supporti le istruzioni interattive da tastiera e che gli account di automazione e ripristino rimangano utilizzabili. Lo stack PAM di esempio mantiene l'autenticazione comune, che potrebbe richiedere la password di sistema e l'OTP: la chiave pubblica più la tastiera interattiva non garantisce di per sé esattamente due prompt o esattamente due fattori. I file PAM, le policy e i nomi dei servizi variano in base alla distribuzione; non applicare questo esempio senza modifiche ai server macOS o Windows.

Dopo aver applicato le modifiche, verifica in una nuova sessione SSH che l’accesso e il funzionamento previsto siano corretti. Mantieni aperta la sessione attuale fino alla verifica, così da poter ripristinare la configurazione se necessario.

App di autenticazione

Usa un’app TOTP sul telefono per scansionare il codice QR di registrazione o inserire manualmente il segreto. Proteggi il codice QR e il segreto e conserva i codici di recupero in un luogo sicuro. L’app è separata dal modulo PAM del server.

2FAS offre backup facoltativi; la sincronizzazione tra dispositivi è una funzione Premium. La disponibilità dipende dalla piattaforma e dal piano.

Esempi

Installa il modulo PAM su Ubuntu. Il modulo è separato da OpenSSH e richiede privilegi di amministratore.

sudo apt update
sudo apt install libpam-google-authenticator

Esegui lo strumento di registrazione per ogni account che utilizzerà OTP. Segui le istruzioni interattive, aggiungi l'account a un'app di autenticazione e archivia in modo sicuro i codici di emergenza. Non condividere o registrare il segreto visualizzato.

google-authenticator

Nel file del servizio SSH PAM esistente (in genere /etc/pam.d/sshd), aggiungi il modulo come regola di autenticazione preservando tutti gli account, le sessioni e le altre regole esistenti. Questo frammento mantiene l'autenticazione comune; la policy PAM potrebbe anche richiedere una password di sistema. Non aggiungere nullok quando è richiesto OTP.

Apri il file con nano:

sudo nano /etc/pam.d/sshd
@include common-auth
auth required pam_google_authenticator.so

Unisci queste impostazioni nella configurazione effettiva del server SSH. Ciò richiede una chiave pubblica e un'autenticazione interattiva da tastiera PAM; L'ordine di inclusione o i blocchi di corrispondenza esistenti possono modificare il risultato. Non sovrascrivere l'intera configurazione.

Apri il file con nano:

sudo nano /etc/ssh/sshd_config
UsePAM yes
PubkeyAuthentication yes
KbdInteractiveAuthentication yes
PasswordAuthentication no
AuthenticationMethods publickey,keyboard-interactive:pam

Convalidare la sintassi e verificare la policy effettiva prima di applicare la procedura di ricarica del servizio SSH del sistema. Utilizza sshd -T -C con l'utente e l'indirizzo pertinenti quando si applicano le regole di corrispondenza. Da una sessione separata, verificare la chiave e tutti i fattori richiesti prima di chiudere la sessione originale.

sudo sshd -t && sudo sshd -T && sudo systemctl reload ssh

Opzionale: chiave pubblica e OTP

Per richiedere una chiave e poi un OTP senza la password dell’account, modifica le regole auth PAM di SSH. Rimuovere common-auth dal servizio PAM SSH riguarda tutti i suoi account e può aggirare altre politiche. Verifica le altre regole auth con l’amministratore; conserva le regole account e session, una sessione aperta e un accesso di recupero indipendente.

Questo frammento Ubuntu illustra le regole auth e non è un file PAM completo. Commenta common-auth solo dopo averne verificato gli effetti. Non aggiungere nullok. Altre regole auth possono richiedere ulteriori fattori.

Apri il file con nano:

sudo nano /etc/pam.d/sshd
# /etc/pam.d/sshd: auth fragment only
# @include common-auth
auth required pam_google_authenticator.so

Dopo aver integrato la configurazione SSH precedente, controlla i valori effettivi. I nomi visualizzati sono in minuscolo. L’ordine di Include e i blocchi Match possono alterare il risultato; per Match usa sshd -T -C con i dati della connessione.

sudo sshd -T | grep -E '^(usepam|pubkeyauthentication|kbdinteractiveauthentication|passwordauthentication|authenticationmethods) '

Verifica e ricarica come indicato sopra. Da una seconda sessione client, accedi con l’account registrato e la chiave privata, quindi inserisci il codice. Verifica che l’accesso fallisca senza la chiave o il codice richiesti prima di chiudere la sessione originale.

ssh -i ~/.ssh/id_ed25519 alice@server.example.com

Secure Pipes supporta le richieste SSH keyboard-interactive per inserire il codice richiesto dal server. Questo OTP è distinto da quello per sbloccare l’app. Il segreto OTP condiviso è sul server e nell’app di autenticazione; Secure Pipes non deve memorizzarlo per questo accesso.

Riferimenti ufficiali

Verificato il 27 ottobre 2026