Un’alternativa alla classica autenticazione tramite password in ssh è l’utilizzo della chiave pubblica.
Ecco una breve guida che può essere utile per configurare l’accesso a un server remoto senza inserire la password.

Questa metodo è utlite in alcuni casi:
- Sicurezza: previene il rischio di attacchi brute force (solo se è disabilitata l’autenticazione con password)
- Comodità: è utile quando si utilizzano script automatici che richiedono l’accesso ad un server remoto (per esempio script di backup)
Per semplicità in questa guida mostrerò l’autenticazione di un utente da una macchina client come utente in una macchina server.
Attenzione: evitare assolutamente l’autenticazione a chiave pubblica tra due sistemi root – root.
Generazione delle chiavi RSA
Innanzi tutto assicurarsi di avere la directory .ssh nella propria home. Se non è presente la creiamo e settiamo i permessi:
client$ mkdir ~/.ssh
client$ chmod 700 ~/.ssh
Ora è necessario generare la coppia chiave privata / chiave pubblica RSA sul client:
client$ ssh-keygen -f ~/.ssh/id_rsa -t rsa
Enter passphrase (empty for no passphrase): …
Enter same passphrase again: …
Viene richiesto l’inserimento di una passphrase. Essa dovrà essere non vuota ed è consigliabile inserirne una composta da almeno 16 caratteri. Non scegliere una frase semplice e facilmente rintracciabile. È abitudine creare passphrase estratte da libri, poemi, testi di canzoni, le cui parole sono spesso intervallate da caratteri non alfabetici.
Le chiavi RSA generate si trovano ora in ~/.ssh/id_rsa per la chiave privata e ~/.ssh/id_rsa.pub per la chiave pubblica.
È buona norma proteggere tali file settando adeguati permessi:
client$ chmod go-w ~/
client$ chmod 700 ~/.ssh
client$ chmod go-rwx ~/.ssh/*
Distribuzione della chiave pubblica
La chiave pubblica precedentemente generata ~/.ssh/id_rsa.pub nel client deve essere copiata sul server nel file ~/.ssh/authorized_keys. Iniziamo a copiare la chiave pubblica nella home dell’utente del server, che si trova all’indirizzo server.example.org:
client$ scp ~/.ssh/id_rsa.pub server.example.org:
Nota: fate attenzione ai due punti “:”.
A questo punto effettuaiamo il login al server e importaiamo la chiave del client:
server$ mkdir ~/.ssh
server$ chmod 700 ~/.ssh
server$ cat ~/id_rsa.pub >> ~/.ssh/authorized_keys
server$ chmod 600 ~/.ssh/authorized_keys
server$ rm ~/id_rsa.pub
Nel caso in cui si vogliano importare più chiavi pubbliche è necessario effettuare un append della chiave pubblica al file ~/.ssh/authorized_keys. Ogni chiave pubblica deve stare su una riga.
Ora possiamo effettuare la nostra connessione dal client al server senza l’inserimento della password:
client$ ssh server.example.org
Enter passphrase for key ‘~/.ssh/id_rsa’:
Ci verrà richiesta la passphrase, precedentemente scelta, per verificare l’autenticazione.
Inconveniente
Ogni volta che vogliamo effettuare un accesso al server remoto ci verrà richiesto l’inserimento della passphrase. È evidente che non è ciò che volevamo ottenere.
Un’idea comoda, ma meno sicura, consiste nell’impostare la chiave RSA senza passphrase.
Un compromesso invece consiste nell’utilizzo del comando ssh-agent, ma questo è un altro capitolo. Rimando alla guida di manuale:
$ man 1 ssh-agent
…
ssh-agent is a program to hold private keys used for public key authenti‐
cation (RSA, DSA). The idea is that ssh-agent is started in the begin‐
ning of an X-session or a login session, and all other windows or pro‐
grams are started as clients to the ssh-agent program. Through use of
environment variables the agent can be located and automatically used for
authentication when logging in to other machines using ssh(1).
…
Fonti:
http://sial.org/howto/openssh/publickey-auth/