Login via SSH con autenticazione a chiave pubblica/privata

Tratto dal wiki di ubuntu:

OpenSSH consente di effettuare l’accesso tramite autenticazione con nome utente e password.
Tuttavia è possibile aumentare il livello di sicurezza abilitando il login tramite l’accesso con autenticazione a chiave pubblica/privata.
Il primo passo da fare è creare la propria coppia di chiavi (privata e pubblica) sul computer locale con il comando:

ssh-keygen -t dsa

Verrà chiesto dove salvare la chiave privata (si consiglia di accettare la posizione predefinita ~/.ssh/id_dsa) e di scegliere una passphrase (una nuova password) che verrà usata per cifrare e decifrare la chiave privata.
Ogni qualvolta servirà la nostra chiave privata, bisognerà prima fornire la passphrase.

N.B.
Si può anche scegliere di non creare la passphrase e quindi di non cifrare la chiave privata: benché questo sia meno sicuro in generale, se si deve usare l’autenticazione in qualche script è una scelta obbligata comunque molto più sicura che mettere nello script, in chiaro, la password.

Insieme alla chiave privata viene creata anche la corrispondente chiave pubblica (localizzata in ~/.ssh/id_dsa.pub sul computer locale), liberamente distribuibile; in particolare la chiave pubblica la si deve inserire nei computer remoti (ai quali si vuole avere accesso) usando il comando ssh-copy-id dal computer locale (su cui risiede la chiave privata) secondo il modello seguente:

ssh-copy-id -i percorsoLocaleChiavePubblica nomeUtenteRemoto@indirizzoIPRemoto

Quello che segue è un esempio:

ssh-copy-id -i ~/.ssh/id_dsa.pub mario@192.168.23.42

Se per qualche motivo non si riuscisse a usare il precedente comando, sarà necessario copiare manualmente l’intero contenuto del file~/.ssh/id_dsa.pub dal computer locale e aggiungerlo in coda al file ~/.ssh/authorized_keys (senza sovrascrivere eventuali contenuti preesistenti) nella cartella utente sul computer remoto.

Una volta aggiunta la chiave pubblica sul computer remoto, non verrà più chiesta la password dell’utente del computer remoto (salvata in /etc/passworddel computer remoto), ma verrà chiesta la passphrase conservata in locale.

Se si sceglie di usare solo l’autenticazione tramite chiave pubblica, per aumentare ulteriormente la sicurezza si può disabilitare l’autenticazione tramite password utente. Aprire il file /etc/ssh/sshd_config con un Editor di testo con i privilegi di amministrazione e aggiungere la seguente riga:

PasswordAuthentication no

Terminate le modifiche sarà necessario riavviare il server ssh.

Se si usa l’autenticazione a chiave pubblica, OpenSSH fornisce un metodo grazie al quale la passphrase verrà chiesta solo una volta durante tutta la sessione. Questa caratteristica è utile ad esempio a chi usa spesso il comando scp, o agli amministratori di computer remoti, in quanto evita di dover reinserire la password ogni volta che si lancia un comando.

Il comando per aggiungere la propria passphrase al gestore delle identità è ssh-add. Digitare il seguente comando:

ssh-add

Verrà chiesta la passphrase, dopodiché la chiave privata sarà sempre disponibile.

Sul computer remoto si può scegliere di far eseguire solo alcuni comandi a chi vi si connette tramite autenticazione a chiave pubblica. Se per esempio si gestisce un repository CVS, si può aggiungere nel file authorized_keys la seguente riga:

command="/usr/bin/cvs server" ssh-dss AAAAB3N....

In questo modo è permessa l’esecuzione esclusivamente dei comandi per il CVS.

Lascia un commento