L'azienda Cloudflare ha presentato lo strumento opkssh (OpenPubkey SSH), che consente di integrare in OpenSSH le funzionalità di autenticazione centralizzata con la possibilità di accesso tramite fornitori OpenID Connect. Con opkssh è possibile eliminare il lavoro manuale nella gestione e configurazione delle chiavi SSH, nonché organizzare la connessione al server da qualsiasi host, senza la necessità di creare chiavi private su ogni computer cliente e senza copiare manualmente le chiavi pubbliche sul server. Per la connessione è sufficiente eseguire sul server il legame con l'account del fornitore OpenID. Il codice dello strumento è scritto in linguaggio Go e distribuito con licenza Apache 2.0.
Opkssh è compatibile con i fornitori OpenID Google, Microsoft/Azure e Gitlab, consentendo di configurare l'accesso tramite i conti esistenti nei servizi gmail.com, microsoft.com e gitlab.com. Utilizzando opkssh, invece delle chiavi SSH permanenti, vengono generate chiavi temporanee, valide per poche ore e create sulla base di una conferma dal fornitore OpenID. La fuga di tali chiavi dopo la scadenza non rappresenta una minaccia per la sicurezza. Per impostazione predefinita, la durata di una chiave è di 24 ore, dopo le quali è necessario identificarsi nuovamente tramite OpenID.
L'integrazione con OpenSSH si basa sulla possibilità di creare estensioni del protocollo SSH, che consentono di allegare dati arbitrari ai certificati SSH. Dopo aver completato l'autenticazione tramite OpenID, il client genera una chiave pubblica contenente un token PK, che conferma l'appartenenza della chiave all'utente dichiarato. Il token è integrato nel protocollo SSH attraverso un campo con dati aggiuntivi del certificato SSH. La creazione e la verifica dei token PK sul lato server avviene utilizzando il protocollo crittografico OpenPubKey.
OpenPubKey consente di generare una chiave pubblica e di associarla a un token emesso dal fornitore OpenID. Attraverso la firma digitale, il fornitore conferma che questa chiave è stata creata dall'utente autenticato dichiarato. Ad esempio, il fornitore OpenID Google può confermare che l'utente è autenticato come test@gmail.com. Sul lato server viene verificato se il token allegato è firmato dal fornitore OpenID e se la firma digitale corrisponde alla chiave pubblica dichiarata, cioè il server può accertarsi che l'utente test@gmail.com abbia creato la chiave pubblica per il client SSH connesso.

L'integrazione con OpenSSH è organizzata tramite la specifica del programma opkssh nel file di configurazione «sshd_config» tramite la direttiva «AuthorizedKeysCommand» (ad esempio: «AuthorizedKeysCommand /usr/local/bin/opkssh verify %u %k %t»). La configurazione dell'associazione degli account con OpenID viene effettuata sul lato server SSH. Sul lato client SSH non sono necessarie modifiche alle impostazioni, ma prima del login è necessario eseguire il comando «opkssh login» e, nella finestra del browser che appare, selezionare il fornitore OpenID e autenticarsi tramite esso.
L'utilità opkssh genererà le chiavi SSH e otterrà un PK-token che conferma che l'utente è stato autenticato e consente di verificare che le chiavi generate appartengano all'utente dichiarato. La chiave pubblica SSH, alla quale è allegato il PK-token tramite il campo dei dati aggiuntivi, sarà scritta nel file ~/ .ssh/id_ecdsas e inizierà a essere trasmessa durante la connessione a server utilizzando l'utilità ssh.
La connessione al server avviene utilizzando lo schema standard per SSH «ssh login@server», mentre server il login deve essere precedentemente identificato con l'account OpenID utilizzato dall'utente. Così, il funzionamento si riduce al fatto che il client ssh invia al server ssh la chiave pubblica e il server esegue il comando «opkssh verify» per verificare la chiave.
Per associare un account a OpenID, l'amministratore del server esegue il comando «opkssh add». Ad esempio, per consentire il login al server come utente «root» con autenticazione OpenID tramite l'account test@gmail.com su Gmail, sarà necessario eseguire «sudo opkssh add root test@gmail.com google», dopodiché il client potrà collegarsi con i parametri di questo account usando il comando «ssh root@host_del_server».
È possibile eseguire manualmente l'associazione dell'account attraverso il file di configurazione /etc/opk/auth_id (o ~/ .opk/auth_id), in cui per l'esempio sopra menzionato verrà registrata la stringa «root test@gmail.com https://accounts.google.com». In aggiunta, attraverso il file /etc/opk/providers è possibile definire un elenco di fornitori OpenID consentiti, le loro impostazioni e un elenco di identificatori client autorizzati.

Fonte: opennet.ru
