Created on 18 Jun 2013 ;    Modified on 23 Aug 2016

putty, utilizzare chiavi RSA per connettersi ad un server

Premessa

L'accesso ad un computer utilizzando una linea dati è croce e delizia di ogni sistemista.
Delizia, perchè si lavora sul computer remoto stando comodamente seduti alla propria scrivania (mai capitato di dover lavorare su un server localizzato in un rumorossimo CED dotato di climatizzazione siberiana? Provare per capire ...).
Croce perché non ti devi chiedere se un hacker proverà ad attaccare un computer così configurato.
Ti devi chiedere quando lo attaccherà.

Per questo motivo è il caso di configurare il computer remoto in modo che accetti collegamenti solo quando si usa una chiave RSA a lui conosciuta.

Ho già scritto una nota su come configurare un server Linux per collegarsi in ssh utilizzando una coppia chiave pubblica/privata.

Però, in quell'articolo mi sono limitato ad un ambito solo Linux: sia per il terminale che per il server.

Ma uno scenario probabile consiste nel voler utilizzare un terminale dotato di sistema operativo Windows verso un server Linux. In questo appunto desidero descrivere questo ambito, utilizzando l'ottima suite Putty. Di questo gruppo di programmi è rilasciato anche il codice sorgente.

Bene, l'elenco della spesa è semplice (si fa per dire).

Quali sono le conoscenze necessarie?

In generale

I passi da affrontare sono analoghi a quelli visti nell'articolo riguardo Linux:

Vediamo le attività una per volta.

nel client, generazione di una coppia di chiavi RSA pubblica e privata

Utilizzando questo link facciamo il download dei programmi PuTTY (putty.exe) e PuTTYgen (puttygen.exe). Entrambi sono dei piccoli eseguibili con interfaccia a finestra, che scrivono i dati di lavoro nel registro di Windows.

Li salviamo in una directory e creiamo i link per poterli avviare:
PuTTY e PuTTYgen

La creazione di una coppia di chiavi RSA è compito di PuTTYgen. Se lo avviamo otteniamo questa finestra:
interfaccia iniziale di PuTTYgen

Generiamo una coppia di chiavi RSA controllando che sia selezionato il radio button SSH2-RSA e spingendo il pulsante Generate.
A questo punto PuTTYgen lavora chiedendo di muovere il mouse: gli serve per generare numeri casuali. Al termine dell'attività si presenta così:
PuTTYgen quando ha generato una chiave RSA

Osservando con attenzione, mista a timore reverenziale e ad un pizzico di diffidenza, la finestra precedente, notiamo i due pulsanti: save public key e save private key. Nonché la scritta in alto: Public key for pasting into OpenSSH authorized_keys file.

Ok. Capito. Fermi tutti, perché dobbiamo fare tre cose prima di chiudere questa finestra e passare ad altro: salvare la chiave pubblica, quella privata, e salvare la chiave pubblica in una forma che piaccia ad OpenSSH.

Per salvare la chiave pubblica e quella privata basta schiacciare i relativi pulsanti e registrare i file in una directory che dovremo successivamente ricordare. Ad esempio, sciacciando il pulsante save private key otteniamo la solita finestra Windows che ci permette di navigare su file system per arrivare alla directory voluta e salvare il file con il nome che decidiamo:
PuTTYgen salvataggio della chiave privata

Ad esempio salviamo il file chiave privata con il nome pc-name_id_rsa.ppk.

A proposito della finestra di salvataggio della chiave privata. Abbiamo notato il selettore Salva come: PuTTY Private Key Files (*.ppk)? Questo ci conferma quanto intuito. PuTTY ha un suo formato per le chiavi RSA. Formato che possiamo importare/esportare verso OpenSSH.

Per completezza, salviamo anche la chiave pubblica in formato PuTTY. Stessa directory, nome file pc-name_id_rsa.pub.

Ora un altro passaggio essenziale: salviamo il file che installeremo nel server.
Selezioniamo con molta attenzione1 e copiamo in clipboard il contenuto presente nel campo di testo intitolato Public key for pasting into OpenSSH authorized_keys file.
Apriamo un text editor, vi copiamo il contenuto della clipboard, e salviamo in un file. Tanto per essere ordinati, salviamo nella stessa directory della chiave privata e diamo un nome indicativo, tipo: pc-name_id_rsa_openssh.pub:
PuTTYgen salvataggio della chiave pubblica in formato OpenSSH

Bene. Abbiamo superato la parte più complessa.

copiare e installare la chiave pubblica nel server

Ad esempio con un client SFTP, ci colleghiamo al server e facciamo l'upload del file pc-name_id_rsa_openssh.pub2 nella directory /root.

Con utenza root, ci colleghiamo con il server. Dopo di che:

cd /root
cat pc-name_id_rsa_openssh.pub >> .ssh/authorized_keys # WARNING. Redirect in append mode. Moreover .ssh must exist
mv pc-name_id_rsa_openssh.pub .ssh # optional, just to be tidy    
chmode 700 .ssh
chmode 600 .ssh/authorized_keys
restorecon -Rv .ssh
service sshd restart

A questo punto il server è in grado di accettare una nostra richiesta di collegamento con chiave RSA.

Attenzione. Se l'account di collegamento non è root, dovremo lavorare nella nostra home directory3, in cui dovranno essere la subdirectory .ssh e il file .ssh/authorized_keys. Inoltre questi oggetti (subdirectory e file) dovranno avere come owner il nostro account.

nel client, configurare il terminale ssh

Il collegamento utilizzando una chiave RSA è compito di PuTTY.

Quando lo avviamo si presenta così (senza i tremolanti bordi rossi):
PuTTY

Configurare Putty è questione di 3 parametri. Nella finestra precedente è evidenziato il primo: il nome host (o l'indirizzo IP se il nostro server non è raggiungibile con DNS).

Il secondo è l'utenza con cui ci vogliamo collegare, evidenziata qui sotto:
PuTTY configurazione dell'utenza

Il terzo è la chiave privata da utilizzare per il collegamento. Che vediamo qui di seguito:
PuTTY configurazione della chiave da usare

A questo punto schiacciando il pulsante Open dovremmo ottenere la finestra del terminale ssh. Se questo non accade, è necessario rivedere con attenzione i passi effettuati.

nel client, configurare il terminale ftp

Se si utilizza il client Filezilla come client FTP, la configurazione è semplice. Basta indicare nella voce di menu Edit/settings... la chiave privata da utilizzare. Come mostrato qui sotto:
Filezilla configurazione della chiave da usare

Per il resto, la configurazione di Filezilla procede come di consueto, utilizzando la voce di menù File/site manager....

opzionale, nel server, disabilitare la possibilità di login ssh con utenza e password

Quest'ultimo passo è tanto semplice, quanto pericoloso. Se configuriamo il server come stiamo per mostrare, non sarà più possibile connettersi con utenza+password.

Inutile dire che se per qualche motivo non dovesse funzionare il collegamento ssh con la chiave RSA, saremo tagliati fuori dal server. Con l'unica possibilità di alzarci dalla scrivania e andare a collegarci con i vecchi sistemi: tastiera e monitor con login locale alla macchina. Quindi attenzione a quel che facciamo. Soprattutto se la nostra scrivania è ad Roma e il server a Milano.

Bene, colleghiamoci via ssh, utenza di root. Dopo di che:

vi /etc/ssh/sshd_config

modifichiamo la riga con il parametro PasswordAuthentication da yes a no, come mostrato qui di seguito:

PasswordAuthentication no

salviamo il file modificato e riavviamo il servizio:

service sshd restart

Fatto!

Buon lavoro. Sperando di non dover andare a Milano.

Riferimenti

CentOS, Network Securing, SSH



  1. Con molta attenzione, perché qui non possiamo perdere un solo byte. Ne' in cima, ne' in coda. 

  2. Attenzione al tipo di file: è la chiave pubblica OpenSSH

  3. Usualmente la directory /home/account