Come impostare ssh in modo che non richieda la password di accesso (chiavi asimmetriche per il login)

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.

Leave a Reply