Alcuni client ssh permettono di definire “sessioni salvate” di connessioni in modo che username e password vengano salvati e non vengano richiesti ad ogni connessione verso un host. Trovo che permettere all’utente di poter salvare la password sia profondamente sbagliato dal punto di vista della security, soprattutto se l’utente ha privilegi non indifferenti sulla macchina remota [ad esempio è nei sudoers].
Detto questo, trovo anche che sia abbastanza noioso inserire la propria password ad ogni connessione. Ma non disperate: il meccanismo standard per risparmiarvi preziosi secondi esiste e ve lo spiegherò tra poco. Inoltre, il meccanismo standard è sicuro di per sé e non indebolisce la struttura di ssh perché utilizza un’autenticazione basata sulla crittografia asimmetrica.
Innanzitutto: queste istruzioni sono per Linux e OSX. In futuro posterò anche le istruzioni per Windows/PuTTY.
Obiettivo: loggarsi dalla macchina locale (local) alla macchina remota (remote) senza inserire la password
Sulla macchina locale: generare le chiavi di autenticazione [1/2]
Le chiavi di autenticazione sono composte da 2 chiavi, una pubblica e una privata. La chiave pubblica rappresenta la nostra identità nel mondo esterno. La chiave privata, invece, rappresenta la nostra chiave segreta, la nostra “password” [anche se è molto più lunga di una password].
Per generare le chiavi bisogna dare questo comando:
local$ ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/home/mbologna/.ssh/id_rsa):
Accettate il path che vi viene proposto premendo Invio
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Vi consiglio fortemente di inserire una password a questo punto. Nonostante molte persone consiglino (sbagliando) di non inserire una password perché si ripeterebbe il problema di dover inserire una password, vi posso assicurare che impostare un ulteriore livello di sicurezza per poter accedere ad un file così delicato come la vostra chiave privata è più che consigliato [e per sfatare un falso mito: non è vero che bisogna reinserire la password, basta affidarsi a un’implementazione sicura di ssh-agent].
Ora controllate che effettivamente il comando abbia creato le vostre chiavi:
local$ ls -la .ssh/
drwx------ 2 mbologna mbologna 4096 2009-09-24 18:43 .
drwx------ 55 mbologna mbologna 4096 2009-11-13 00:42 ..
-rwx------ 1 mbologna mbologna 1743 2009-08-04 16:52 id_rsa
-rwx------ 1 mbologna mbologna 433 2009-08-04 16:52 id_rsa.pub
id_rsa contiene la vostra chiave privata, mentre id_rsa.pub contiene la vostra chiave pubblica.
Sulla macchina remota: autorizzare l’autenticazione tramite chiave pubblica [2/2]
Loggatevi sulla macchina remota inserendo la vostra password [per l’ultima volta :)]:
local$ ssh username@remote
A questo punto seguite i seguenti passi:
- create una directory .ssh nella vostra home
mkdir .ssh
- impostate i permessi appropriati
chmod 700 .ssh
- spostatevi nella directory .ssh
cd .ssh
- create un file chiamato authorized_keys
touch authorized_keys
- impostate i permessi approppriati
chmod 600 authorized keys
- aprite il file authorized_keys con il vostro editor preferito [ad esempio
vi
]vi authorized_keys
- copiate e incollate il contenuto del file ~/.ssh/id_rsa.pub presente su local nel file authorized_keys
- fate un logout
Abbiamo finito! Ora potete semplicemente loggarvi sulla macchina remote semplicemente con ssh username@remote
Nota: se non volete digitare la password ogni volta che accedete alla vostra chiave privata, date un’occhiata a ssh-agent.