Autenticazione nei sistemi *unix sicura e senza password grazie alle chiavi SSH

SSH è uno strumento indispensabile per chi, come me, ha la necessità di amministrare sistemi linux / *unix da remoto. L’unica scocciatura è che, ad ogni connessione al server,  è necessario inserire la password.

Fortunatamente esiste un modo rapido e sicuro per aggirare questo problema, basato sull’autenticazione tramite una coppia di chiavi (privata e pubblica); il concetto alla base di questo sistema di autenticazione è semplice: la verifica dei dati di autenticazione viene gestite direttamente tramite le chiavi SSH, bypassando la richiesta della password (che meno volte viene digitata, più è difficile che qualche malintenzionato riesca a rubarla) che può essere eventualmente sostituita dalla richiesta di una passphrase di sblocco della chiave (per i più paranoici!).

Diamo per assunto che ci siano (almeno) due sistemi *unix like: un client e un server ed il client ha la necessità di accedere, tramite SSH, al server. In realtà tale metodo è valido anche per client Windows che hanno la necessità di accedere a sistemi *unix. Per approfondire l’argomento, vi rimando a questo link.

Comandi da eseguire, da shell, sulla macchina client

Sul computer client, l’utente deve generare una coppia di chiavi pubblica / privata, necessarie per l’autenticazione sul server. Nel momento in cui viene richiesta la password è possibile:

  1. inserire una password, il che vuol dire che, ogni volta che l’utente tenterà di connettersi al server, sarà necessario inserire la password (più sicuro ma meno comodo);
  2. non inserire la password, il che vuol dire che non verrà più richiesta nessuna password in fase di connessione al server (più comodo ma meno sicuro).

Negli esempi, utilizzerò gli host di fantasia client.com e server.com e l’username utente. Queste variabili vanno ovviamente sostituite con gli host/IP e gli username delle vostre macchine.

Il comando da eseguire per generare le chiavi è:

utente@client:~% ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/Users/one/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/utente/.ssh/id_rsa.
Your public key has been saved in /home/utente/.ssh/id_rsa.pub.
The key fingerprint is:
11:22:33:44:55:66:77:88:99:00:aa:bb:cc:ee:ff:gg utente@client.com

Installazione della chiave pubblica sulla macchina server

Metodo 1: Copia automatica della chiave pubblica

Basta eseguire, dalla macchina client, il seguente comando:

utente@client:~% ssh-copy-id -i ~/.ssh/id_rsa.pub utente@server.com

Quando otterrete questo messaggio a video, inserite la password di utente sul server:

/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed — if you are prompted now it is to install the new keys
utente@123.123.123.123’s password:

A conferma dell’operazione otterrete questo messaggio:

Number of key(s) added: 1

Metodo 2: Copia manuale della chiave pubblica

Anzitutto copiatevi la chiave pubblica della macchina client, che potete visualizzare eseguendo il seguente comando:

utente@client:~% cat ~/.ssh/id_rsa.pub

AAAAB3NzaC1yc2EAAAADAQABAAABAQCxBaZPIvb56VWhSKhp2oZOtvFEGXRkpNXbt5MVM5UULDhu54nT5gaEnfpsyGFCDC6HiJSqlDp263xOhA/3bYqZ4ricZG7jFrS7N8X2fPvzu2tw0VLHs916gFoxIQPA1UCcqhKkjik6KgM1+r4/omrvf11uISpcG0D5LNlD+regWFE93hBBRFWYymq370P99XSzG9ny1Bb630L3E7GVWGf31l143a2+yUYS3hL1wMgwoWYMGbGJCeI3Vlnb982tXIFZD/F9tXjYQjE1Girf980NJHzYeN44xs5xqEJVoyzMCZwEvuarL/757ZMiQSNbUJTycdvdoCk1MFB/WyaULi95 utente@client

Collegatevi sulla macchina server e, se non esiste, create la cartella .ssh e il file authorized_keys con i seguenti comandi:

utente@server:~% mkdir ~/.ssh/

utente@server:~% touch ~/.ssh/authorized_keys

Inserite tutto il contenuto del comando cat ~/.ssh/id_rsa.pub , che vi eravate precedentemente copiati, nel file authorized_keys.

Autenticazione sul server utilizzando le chiavi SSH

Ora potete collegarvi dal client al server utilizzando le chiavi SSH, con il seguente comando:

utente@client:~% ssh utente@server.com

Nota: se, in fase di creazione delle chiavi hai deciso di inserire un password, vi verrà richiesta ad ogni connessione, altrimenti la connessione avverrà in maniera trasparente, senza immissione di password.