Come funzionano le chiavi SSH all'atto pratico

03/08/2023 | ~ 7 minuti

SSH è un protocollo (ormai divenuto uno standard de facto), noto per la sua cifratura, che agevola i collegamenti tra due host all'interno di una rete locale o attraverso Internet.

Questione di chiavi

Il link tra client e server può avvenire utilizzando la password dell'utente al quale ci si deve connettere oppure, per garantire una maggiore sicurezza, con una coppia di chiavi.

Si tratta della chiave pubblica e della chiave privata, tipicamente impiegate dagli algoritmi di crittografia asimmetrica.
Entrambe le chiavi non sono altro che due file che entrano in gioco nei processi di cifratura/decifratura messi in atto dal protocollo, e che dipendono l'una dall'altra.
La loro peculiarità è quella di non permettere di risalire mai all'altra quando se ne possiede solo una delle due.

Se si entra in possesso della sola chiave privata, tuttavia, è sempre possibile collegarsi ad un server. L'unico ostacolo in questo caso è l'eventuale passphrase applicata ad essa, di cui tratteremo a breve.
Come suggerito anche dal nome, la chiave privata non va mai condivisa; la chiave pubblica può essere invece distribuita senza problemi.

Generazione delle chiavi

Per consuetudine la rappresentazione dei comandi avviene con il prefisso "$ ", che non va digitato nella shell.

La coppia di chiavi può essere generata automaticamente con un comando di openssh: $ ssh-keygen A questo punto vi verrà chiesto di indicare il percorso dove salvare le chiavi. Premendo Invio a vuoto saranno creati i file id_rsa (privata) ed id_rsa.pub (pubblica) nella cartella ~/.ssh .
Attenzione, se non si specifica nessun percorso le eventuali chiavi con lo stesso nome verranno sovrascritte.

L'ultima richiesta che vi verrà fatta sarà quella di impostare una passhrase (banalmente, una password) per la chiave privata. Anche in questo caso avrete eventualmente la facoltà di non rispondere, per non applicare questa protezione aggiuntiva.

Le impostazioni di sicurezza di default (RSA a 3072 bit) dovrebbero essere sufficienti per un utilizzo standard.
Ssh-keygen, comunque, permette una configurazione capillare con l'uso dei suoi parametri. Si consiglia di visionare il manuale con: $ man ssh-keygen

Condivisione della chiave pubblica

Per instaurare un collegamento SSH dal client al server è necessario che quest'ultimo sia a conoscenza della chiave pubblica del client in questione.
Per farla più semplice, la chiave pubblica del dispositivo dal quale operiamo deve essere trasmessa preventivamente all'host che si vuole controllare.
Anche qui il terminale ci viene in soccorso con un comando: $ ssh-copy-id -i percorso-chiave-pubblica user@ip-del-server Qui subentra un piccola complicazione: prima di settare le chiavi abbiamo bisogno di avere abilitato un accesso via password al server.
Se si tratta di un nostro dispositivo e siamo a conoscenza della password utente, generalmente non dovrebbero esserci problemi; in caso contrario il contenuto del file della chiave pubblica del client dovrà essere inserito manualmente all'interno del file ~/.ssh/authorized_keys sul server (ossia bisogna replicare le azioni che farebbe il comando ssh-copy-id).

Se per esempio impartissi il comando: $ ssh-copy-id -i ~/.ssh/id_rsa.pub dajelinux@192.168.1.50 mi verrebbe chiesta la password dell'utente dajelinux dell'host con indirizzo IP 192.168.1.50 nella rete locale per aggiungere la chiave tra quelle autorizzate del server.

La connessione

Ci siamo, con: ssh dajelinux@192.168.1.50 avremo le porte spalancate al controllo del server con l'indirizzo ip specificato ed impersonando l'utente dajelinux. A meno che...non avessimo impostato precedentemente la passphrase!

L'opzione passhrase

Questo tipo di password non viene processata dal protocollo SSH, ma è solo un livello di sicurezza aggiuntivo applicato sul client per moderare l'utilizzo della chiave privata.
Con una passphrase attiva, questa verrà chiesta ogni volta che si tenterà di collegarsi ad un server.

Per un eventuale attaccante che fosse riuscito a rubarvi la chiave, probabilmente risalire alla sua password non sarà troppo difficile, ma si tratta pur sempre di una misura cautelativa aggiuntiva.
Sta a voi decidere se optare per un accesso del tutto privo di password (le chiavi dovrebbero servire proprio a sostituirle), o a rinunciare ad un po' di comodità in nome della sicurezza.

Disattivare l'accesso con password

Una volta impostate correttamente le chiavi, sarebbe buona norma disattivare l'accesso SSH con password sul server.
Una modifica al file /etc/ssh/sshd_config (che richiede permessi di amministratore) dovrebbe essere sufficiente nella maggior parte dei casi.
Nello specifico, bisogna assicurarsi che l'opzione PasswordAuthentication non sia commentata (cioè non abbia il simbolo # all'inizio della sua riga) e sia impostata su no.
La riga all'interno del file di configurazione dovrà quindi apparire nel suo complesso così: PasswordAuthentication no La modifica in questione impedirà di prendere il controllo di un server da remoto anche se la password dell'utente venisse rubata. Per effettuare il collegamento sarà obbligatorio l'uso delle chiavi.

[user@dajelinux ~]$ dajelinux --per-approfondire

Ci avete mai pensato che le chiavi hanno reso obsolete le password già anni fa?