Autenticazione SSH senza password

Parte 1 – Come generare una coppia di chiavi pubblica/privata

Premessa

OpenSSH permette di autenticare un utente su un server SSH con uno scambio di chiavi, evitando l’utilizzo di password.

Il principio su cui si basa l’autenticazione prevede l’inserimento di una chiave pubblica, di cui solo noi conosciamo la corrispondente chiave privata1, nella configurazione SSH del server al quale vogliamo collegarci.

OpenSSH
Hpott, CC BY-SA 4.0, via Wikimedia Commons

La chiave pubblica può essere condivisa, può essere usata per criptare messaggi che solo la chiave privata associata può decifrare.

La chiave pubblica dovrà essere caricata sul server SSH, aggiungendola al file ~/.ssh/authorized_keys dell’account utente con il quale intendiamo connetterci.

OpenSSH è integrato in un’ampia varietà di sistemi operativi, a partire dall’originario OpenBSD fino alle versioni più recenti di Microsoft Windows2.

Per esemplificare la procedura di creazione delle chiavi SSH, utilizzeremo due macchine Linux, un client Ubuntu ed un server Debian.

Creazione della coppia di chiavi SSH

Sul computer locale utilizziamo il comando ssh-keygen per generare la nostra coppia di chiavi SSH:

ssh-keygen
OpenSSH ssh-keygen

Il comando propone una serie di domande per le quali possiamo confermare le opzioni predefinite3.

All’interno della cartella .ssh nella home dell’utente locale, avremo la chiave privata id_rsa e la corrispondente chiave pubblica id_rsa.pub

contenuto della cartella .ssh nella home dell'utente locale

Copia della chiave pubblica nel server SSH

Ci sono diversi modi per copiare la nostra chiave pubblica nel server SSH remoto.

– Copia con il comando ssh-copy-id

Il metodo più semplice per copiare la chiave pubblica è quello fornito dall’utilità ssh-copy-id. Il comando è incluso in OpenSSH in molte distribuzioni e per poterlo utilizzare è necessario avere le credenziali di accesso in SSH con password al server. La chiave pubblica sarà copiata nella home dell’account di cui abbiamo le credenziali di accesso in SSH.

ssh-copy-id username@remote_server
copia chiave pubblica SSH con ssh-copy-id

In questo modo, una volta collegati al server con le credenziali fornite, il contenuto della chiave pubblica id_rsa.pub verrà inserito nel file authorized_key all’interno della cartella ~/.ssh nella home dell’account remoto.

contenuto della cartella .ssh nella home dell'utente remoto nel server OpenSSH

– Copia con SSH

Se non possiamo utilizzare ssh-copy-id, ma abbiamo le credenziali di accesso di un account al server, possiamo copiare la nostra chiave pubblica semplicemente con ssh:

cat ~/.ssh/id_rsa.pub | ssh username@remote_server "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys"
copia della chiave pubblica con SSH nel file authorized_keys nella cartella .ssh nella home dell'utente remoto nel server OpenSSH

– Copia manuale

Se non abbiamo accesso SSH basato su password al server, dovremo copiare manualmente in altro modo il contenuto della chiave pubblica nel file ~/.ssh/authorized_keys sul server remoto.

Per mostrare il contenuto della chiave id_rsa.pub:

cat ~/.ssh/id_rsa.pub
contenuto della chiave pubblica SSH

Accediamo al server remoto nel modo che ci è possibile (ad esempio il pannello di controllo fornito dall’hosting provider e disponibile via web).

Il seguente comando, se necessario, crea la cartella ~/.ssh nella home dell’utente sul server remoto:

mkdir -p ~/.ssh

Qui possiamo creare o modificare il file authorized_keys, aggiungendo alla fine del file il contenuto del nostro id_rsa.pub:

echo public_key_string >> ~/.ssh/authorized_keys

Al posto di public_key_string bisognerà inserire l’output del comando cat ~/.ssh/id_rsa.pub (nell’esempio di cui sopra, sarà “ssh-rsa AAAAB3[…]utente@ubupc”).

Collegamento al server con le chiavi SSH

Possiamo quindi collegarci al server senza necessità di password:

ssh username@remote_server
ssh autenticazione senza password

Se non abbiamo configurato una passphrase per la nostra chiave privata, ci collegheremo al server immediatamente. Nel caso avessimo definito una passphrase al momento della creazione della chiave, questa ci verrà richiesta prima di poterci collegare al server.

Disabilitare l’accesso SSH basato su password

Prima di procedere, assicuriamoci di avere accesso SSH al server con autenticazione basata su chiave4.

Apriamo il file di configurazione di SSH:

sudo nano /etc/ssh/sshd_config

Ricerchiamo la direttiva PasswordAuthentication, rimuoviamo il carattere # se presente all’inizio della riga, e impostiamo il valore su no:

autenticazione senza password

Salviamo il file e, per rendere effettivo il cambiamento, facciamo ripartire il servizio:

sudo systemctl restart ssh

Parte 2 – Come generare una coppia di chiavi pubblica/privata in ambiente Windows


Parliamone


Note

1. La chiave privata deve essere tenuta segreta dal client, eventuali compromissioni della chiave privata permetterebbero a chi ne è in possesso di collegarsi ai server configurati con la chiave pubblica associata, senza ulteriori verifiche.
2. OpenSSH: Users. (n.d.). https://www.openssh.com/users.html
3. Come ulteriore misura di sicurezza possiamo inserire una passphrase con la quale criptare la chiave privata su disco. Se configurata, dovremo poi inserirla ogni volta che utilizziamo la nostra chiave.
4. Accesso SSH con autenticazione basata su coppia di chiavi pubblica/privata per l'utente root o, preferibilmente, per altro account del gruppo sudo.