Per chi esegue tante procedure tramite SSH o semplicemente ha diversi server presso i quali vuole effettuare delle operazioni automatiche da remoto, come ad esempio un backup con rsync, l’obbligo di inserire la password ad ogni connessione può risultare problematico se non addirittura inabilitante, per evitare questo inconveniente, si possono seguire iversi metodi, unotra tutti è l’autenticazione tramite certificato.
SSH di base permette la connessione tramite l’autenticazione verificata da una password trasferita in chiaro, se non parliamo di connessioni tramite VPN, questo metodo di autenticazione non è molto sicuro di per se, ma è anche il più comune e facile da utilizzare, il problema di un sistema simile è l’obbligo di dover digitare la password in questione ogni volta che dobbiamo collegarci al server SSH, fino adesso non mi ha mai causato problemi reinserire la password, anche se utilizzo password lunghe e complesse per i server, ma ultimamente, per necessità, ho dovuto abbandonare il sistema di backup remoto per uno in locale sul mio Mac, per eseguire il backup ho deciso di utilizzare rsync, un programmino che permette di effettuare delle sincronizzazioni tra cartelle remote, ma di lui parlerò in un altro articolo, il problema che ho subito riscontrato nell’utilizzare una procedura simile, riguarda principalmente il fatto che ogni volta che il processo di backup veniva eseguito, non iniziava se non inserivo a mano la password, decisamente scomodo per un sistema automatico, per ovviare ho deciso di cambiare metodo di autenticazione, passando dalla semplice password all’utilizzo di un certificato per identificare il mio computer, un operazione alquanto semplice:
Per prima cosa aprite il terminale del vostro computer, che sia un Mac, Linux/BSD o un Windows, non importa, la procedura è più o meno la stessa, cambia solo per Windows e i vari client come Putty o SecureCRT, ma la base è la stessa, una volta aperto il terminale dovremo creare un certificato per farci riconoscere:
[bash]
ssh-keygen -t dsa -b 1024
[/bash]
Vi verranno poste alcune domande, potete rispondere a tutte premendo invio, tra le varie domande vi verrà chiesta una passphrase, in pratica è una password che viene inserita nel certificato e che verrà chiesta ogni qualvolta viene utilizzato il certificato, a mio avviso è più sicura un’autenticazione tramite certificato con password che semplicemente la password in chiaro, se non volete che vi venga chiesta di inserire una password ad ogni utilizzo del certificato, lasciate vuota la risposta e premete invio, completata la procedura, tornerete al terminale, il certificato verrà salvato in ~/.ssh/id_dsa e ~/.ssh/id_dsa.pub
Ora che abbiamo creato il nostro certificato, dobbiamo trasferirlo sul server e includerlo nel file authorized_keys (o authorized_keys2) che si trova nella directory .ssh dell’utente con il quale vogliamo autenticarsi sul server, possiamo eseguire questa procedura con un semplice comando da eseguire nel terminale del nostro computer:
[bash]
cat ~/.ssh/id_dsa.pub | ssh UTENTE@SERVER "cat – >> ~/.ssh/authorized_keys"
[/bash]
Sostituite UTENTE@SERVER con quelli relativi al server e premete invio, vi verrà chiesta la password del server remoto, probabilmente per l’ultima volta da questo terminale, se non vi sono stati segnalati errori, provate a collegarvi con un semplice ssh UTENTE@SERVER, dovreste riuscirci senza dover immettere la password, potete utilizzare anche ssh UTENTE@SERVER -i /path/certificato per specificare un certificato che si trova in una directory diversa o con un nome diverso.
Per farsi autenticare in automatico da altri server, basta eseguire solo l’ultimo passo descritto, cambiando solo UTENTE@SERVER, non avrete bisogno di ricorrere a nuove generazioni di certificati, se non in casi particolari e specificati dai server stessi.
Nel caso in cui la procedura sopra indicata non dovesse andare,i problemi più comuni sono:
Sul server remoto non esiste la directory .ssh, per verificare che la directory esista basta collegarsi e scrivere nel terminale cd .ssh se vi viene tornato un errore allora dovremo crearla con:
[bash]
mkdir .ssh
chmod 700 ~/.ssh
[/bash]
Creata la directory, eseguite nuovamente la procedura per trasferire i certificato e provate nuovamente a collegarvi.
Un altro problema comune e che non riporta nessun errore a video quando ci si prova a collegare, riguarda i permessi delle directory e dei file interessati per l’autenticazione, per sistemare questo problema eseguite sul server:
[bash]
chmod go-w ~/
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys*
[/bash]