Come utilizzare SSH senza password

SSH (Secure SHell) è un protocollo che permette di stabilire una connessione cifrata tra due host, attraverso una interfaccia a linea di comando. È tipico nei sistemi UNIX, l’utilizzo di un client SSH (solitamente OpenSSH) per l’amministrazione remota di sistemi. Cercherò in primo luogo di descrivere come SSH funziona, ed in seguito vi fornirò un modo per utilizzare SSH senza dover immettere la password ad ogni connessione.

La sicurezza nelle comunicazioni via SSH è resa disponibile da tre diverse fasi che avvengono prima che l’utente possano stabilire la vera e propria connessione con l’host remoto:

  • Identificazione dell’host: in questa fase ci si deve assicurare che l’host con il quale si sta tentando di comunicare sia davvero chi afferma di essere. L’identificazione è effettuata attraverso tecniche di autenticazione RSA, che è un algoritmo di cifratura pubblica. LA prima volta che ci si connette ad un host si memorizza la sua chiave pubblica in corrispondenza del suo indirizzo, in modo tale da verificare, per le connessioni successive, la corretta identificazione dell’host. Nessun altro host infatti potrà decodificare i messaggi criptati attraverso la chiave pubblica corrispondente.
  • Criptazione: è necessario stabilire una comunicazione punto a punto nella quale il trasferimento dei dati avviene previa criptazione, in modo tale che, nel caso qualcuno stia osservando la comunicazione, questo non sia in grado di capire il significato della stessa. Questa fase avviene prima dell’autenticazione, in modo tale che ogni informazione legata a questa fase (password, o generali informazioni di autenticazione) vengano trasmesse in modo sicuro. La criptazione dei dati avviene solitamente attraverso sistemi a chiave simmetrica, molto più efficienti rispetto a meccanismi a chiave pubblica. In definitiva la chiave simmetrica utilizzata è diversa da sessione a sessione e viene trasmessa tra i due host attraverso la chiave pubblica e quella privata.
  • Autenticazione: in questa fase è necessario autenticarsi, cioè provare la propria identità presso l’host remoto. Questo può essere fatto inserendo la propria password oppure utilizzando i certificati, come vedremo più avanti.

La cosa “bella” di SSH è che tutte queste operazioni sono per lo più trasparenti all’utente e permettono un reale incremento della sicurezza nell’accesso remoto ad un host.

Passiamo ora al metodo per autenticarsi via SSH senza l’inserimento di una password. Per chiarire meglio i concetti userò local$: per stabilire i comandi che vanno immessi sulla macchina locale e remote$: per i comandi che vanno immessi sulla macchina remota. Inoltre remoteusername rappresenta lo username del nostro utente sulla macchina remota, mentre remoteaddress l’indirizzo di questa macchina. Analogamente con localusername e localaddress indicherò utente ed indirizzo della macchina locale.

Passiamo ora alle operazioni da compiere sull’host locale.

local$: rm -fR ~/.ssh

Questa istruzione “pulisce” la vostra directory .ssh, che contiene tutte le informazioni riguardanti le connessioni remote che avete effettuato fino a questo momento. Cancellatela solo se sapete cosa state facendo, altrimenti lasciatela dove sta. Creiamo ora una coppia di chiavi pubblica e privata per il nostro host locale, che ci serviranno per connettersi senza password all’host remoto.

local$: ssh-keygen -t dsa -f ~/.ssh/id_dsa -C "localusername@localaddress"

In questo caso la parte localusername@localaddress è un commento, possiamo inserire la stringa che desideriamo. Tuttavia una stringa di questo tipo ci tiene a mente a chi fa riferimento la coppia di chiavi pubblica e privata.

Questo comando richiederà l’inserimento di una “passphrase”. Inseriamo una frase che ricordiamo facilmente. Attenzione: questa stringa ci verrà richiesta quando tenteremo di connetterci nuovamente all’host remoto. In Mac OS X in questo caso interviene l’aiuto del portachiavi che ricorderà questa password per noi, e dopo il primo login via SSH ci permetterà di effettuare login senza dover inserire la password. Nel caso in cui il vostro sistema operativo non consenta questa possibilità, allora, per ottenere l’effetto desiderato (cioè il login via SSH senza il bisogno di inserire la password) dovrete inserire passphrase nulla, cioè non inserite alcuna passphrase. L’output finale del programma sarà una cosa di questo genere:

SSH no password on Mac

A questo punto procediamo a copiare la chiave pubblica sull’host remoto. Sfruttiamo il comando scp:

local$: scp ~/.ssh/id_dsa.pub remoteusername@remoteaddress:/homedirectory/.ssh/

Ci verrà richiesto di inserire l’indirizzo nella lista degli host conosciuti (se è la prima volta che ci connettiamo a questo host remoto) e naturalmente la password dell’utente remoto, cioè la password del nostro account sull’host remoto. homedirectory indica naturalmente la directory di home per l’utente sull’host remoto. Su sistemi Mac solitamente la directory home sta in Users/, mentre su sistemi UNIX in genere le home si trovano nella directory home/.

In seguito accediamo all’host remoto. Ciò può essere fatto semplicemente attraverso SSH:

local$: ssh remoteusername@remoteaddress

Anche in questo caso ci verrà ancora richiesta la password (Abbiate ancora un po’ di pazienza..).

Ora, appendiamo il contenuto del file che abbiamo appena copiato sul file che contiene tutte le chiavi autorizzate, e cambiamo i permessi di questo file. Poi effettuiamo il logout.

remote$: cat .ssh/id_dsa.pub >> .ssh/authorized_keys
remote$ chmod 644 .ssh/authorized_keys
remote$ exit

A questo punto è possibile effettuare login senza inserire la password (nel caso in cui non abbiate inserito alcuna passpharse al momento della generazione delle chiavi pubblica e privata sul vostro host), oppure inserendo la vostra passphrase.

Per ciò che riguarda chi vuole sfruttare questo metodo su Mac OS X consiglio di inserire la passphrase, che poi vi verrà richiesta solo al primo login, e poi sarà ricordata dal vostro portachiavi.

Come al solito, questa non è la Bibbia. Per qualsiasi chiarimento, dubbio, delucidazione, siete invitati a commentare, criticare, portare i vostri contributi.

Annunci

6 Risposte

  1. salve,

    mi piacerebbe sapere se c’è la possibilità di settare una password di un utente remoto appena creato via SSH

    questo su sistemi SUN Solaris

    grazie anticipatamente

  2. Non ho mai avuto a che fare con sistemi SUN Solaris. Se è un sistema UNIX esiste un comando passwd che ti permette il cambiamento della password per l’utente corrente.

  3. Ciao, ti ringrazio per il post si è rivelato molto utile, ora, ho uno script che viene lanciato da una macchina X su una macchina Y, intendevo sapere se è possibile fare in modo che non venga richiesta la passphrase, io l’ho impostata vuota.

    Grazie

  4. Forse non ho capito bene la domanda, ma se hai impostato la passphrase vuota non dovrebbe venire richiesto nulla. Comunque se stai usando uno script che si connette in qualche modo da una macchina X ad una Y, prova a guardare il manuale del comando che usi per connetterti, perché può darsi che ci sia una opzione per inserire la passphrase (anche se è vuota).

  5. Sembra che il portachiavi di OSX, lanciando ssh nomehost da iTerm, se ne freghi bellamente di registrare la passphrase.
    Ho risolto eliminandola nella creazione delle chiavi. 🙂

    Articolo molto utile e fatto bene.
    Grazie.

  6. iTerm? Qual è la tua versione di OS X? Io uso direttamente il terminale e la procedura funziona molto bene! Forse iTerm non è integrato con il portachiavi (non lo so, ripeto: non lo uso).
    Magari faccio alcune prove poi ti faccio sapere.

Rispondi

Inserisci i tuoi dati qui sotto o clicca su un'icona per effettuare l'accesso:

Logo WordPress.com

Stai commentando usando il tuo account WordPress.com. Chiudi sessione / Modifica )

Foto Twitter

Stai commentando usando il tuo account Twitter. Chiudi sessione / Modifica )

Foto di Facebook

Stai commentando usando il tuo account Facebook. Chiudi sessione / Modifica )

Google+ photo

Stai commentando usando il tuo account Google+. Chiudi sessione / Modifica )

Connessione a %s...

%d blogger hanno fatto clic su Mi Piace per questo: