lunedì 16 maggio 2011

Autenticarsi su un server ssh senza immettere password

Questo breve post è un estratto di un ampio articolo presente sull'ottimo e indispensabile Wiki di Archlinux, a cui vi rimando per approfondimenti.
Qui tratterò essenzialmente come accedere ad un serve ssh utilizzando una chiave precedentemente creata, anziché una password, e di come "passare" automaticamente questa chiave senza doverla digitare ogni volta. (utile se utilizzate sshfs e per eseguire script in remoto)

- creiamo sulla macchina client  le due chiavi di autenticazione (privata e pubblica) avendo l'accortezza di non cambiare il percorso di default proposto e di impostare, quando richiesto, una passphrase non banale:

$ ssh-keygen -b 521 -t ecdsa

nella cartella .ssh troveremo ora due nuovi file:  id_ecdsa  e id_ecdsa.pub.

- copiamo la chiave pubblica sulla macchina server:

$ scp .ssh/id_ecdsa.pub server:

- accediamo al server ssh, immettendo come di consueto la password di login:

$ ssh server

- aggiungiamo la nostra chiave al file authorized_keys (creandolo se non presente):

$ cat id_ecdsa.pub >> .ssh/authorized_keys

- impostiamo i permessi corretti:

$ chmod 600 .ssh/authorized_keys

- e rimuoviamo la chiave originaria, non più necessaria

$ rm id_ecdsa.pub

- abbiamo completato la configurazione lato server, torniamo quindi sul client per installare keychain, un tool che si occuperà di gestire le nostre chiavi private, risparmiandoci il compito di inserire la passphrase ad ogni nuovo accesso; sotto Archlinux date:

# sudo pacman -S keychain

- per avviare automaticamente keychain ogniqualvolta apriamo la nostra shell preferita, aggiungiamo la seguente stringa a .bashrc:

eval `keychain --eval --agents ssh id_ecdsa`

- Chiudiamo e riapriamo la nostra shell; keychain verrà avviato e ci chiederà, solo per questa prima volta, la passphrase che abbiamo scelto in fase di generazione delle nostri chiavi di autenticazione e la memorizzerà per noi fino al prossimo shutdown della macchina. Dopodiché proviamo a connetterci nuovamente al nostro server:

$ ssh server

Se tutto è stato fatto correttamente, eseguendo questo comando accederete direttamente al terminale del server remoto senza aver immesso nessun password o passphrase e, al tempo stesso,  in tutta sicurezza!
Importante:
Se avete configurato la vostra macchina per avviare automaticamente Xorg al boot, modificate la riga precedentemente aggiunta a .bashrc in questo modo:

[ $TERM = 'xterm' ] && eval `keychain --eval --agents ssh id_ecdsa`

In caso contrario, il caricamento del vostro desktop resterà bloccato, probabilmente mostrandovi una schermata nera, in attesa della passphrase, senza però mostrarvi alcun prompt :-)