Accesso a server linux in ssh tramite chiavi

Chiunque di voi abbia mai avuto bisogno di amministrare da remoto un server Linux avrà probabilmente usato il protocollo ssh. Grazie a questo protocollo è possibile infatti aprire una sessione di terminale “virtuale” e gestire il server da linea di comando, come se fossimo collegati localmente.

Per usare questo sistema, da una macchina linux è sufficiente l’omonimo comando

ssh

mentre su Windows possiamo usare il preziosissimo programma PuTTY.

Senza voler in questa sede approfondire tutte le funzionalità realizzabili tramite questo protocollo (che può anche fare da “tunnel” per altri tipi di accesso), vediamo come gestire l’autenticazione ssh tramite chiavi.

Autenticazione

L’opzione più semplice (e quella più comunemente usata) per autenticarsi via ssh a un server remoto è quella di digitare il proprio username e la propria password. Questa modalità può andare bene per la maggior parte dei casi, ma ci sono almeno due motivi per valutare alternative:

  1. con questo sistema, lo username e la password passano in rete e corrono il rischio di essere sniffate, ovvero intercettate lungo il tragitto;
  2. dovremo sempre digitare utente e password per accedere, e questo ci impedisce – ad esempio – di utilizzare il protocollo ssh per operazioni pianificate, quali backup in rete

Fortunatamente è possibile usare l’autenticazione tramite un sistema a chiave pubblica e privata.

Come funziona

Con questo sistema, ciascun utente crea una coppia di chiavi, di cui quella pubblica viene salvata sul server remoto, mentre l’altra viene usata per criptare i dati. Il server remoto usa la chiave pubblica per decriptare i dati e verificare quindi che erano stati criptati con una determinata chiave privata. In questo modo l’identità di chi sta cercando di connettersi è accertata, senza che sia passata nessuna password.

Notare che tale coppia di chiavi è specifica per ogni utente e per ogni host, quindi se ci colleghiamo da due host diversi dovremo generare due coppie di chiavi.

Come si attiva

1. Creazione della coppia di chiavi

Sulla macchina DA cui ci si vuole collegare, verificare che sia installato il pacchetto OpenSSH e poi digitare:

ssh-keygen -t dsa

questo genera due file, id_rsa e id_rsa.pub, nella sottocartella .ssh della propria home directory. Esistono altri parametri per il comando ssh, che determinano ad esempio il tipo di cifratura e la robustezza della chiave. L’esempio riportato è comunque sufficiente, se volete approfondire:

man ssh

Fra le altre cose vi verrà chiesta una passphrase per la chiave privata. Questa passphrase non viene inviata in rete, ma serve per autorizzare l’accesso locale alla chiave privata. Questo ovviamente aumenta la sicurezza, ma vi costringe a digitarla tutte le volte, quindi risolve solo una delle due esigenze segnalata. In questo caso avete due scelte:

  1. Usare una passphrase vuota
  2. Usare ssh-agent

Per il momento non approfondiremo ssh-agent e useremo una passphrase vuota. Assicuriamoci che nessuno possa accedere al nostro PC e per il momento il compromesso di sicurezza può essere accettati.

2. Trasporto della chiave pubblica

Il contenuto del file id_rsa.pub deve essere accodato al file authorized_keys nella sottocartella .ssh della propria home directory sul server remoto. Questo può essere fatto tramite un’ultima sessione ssh con normale autenticazione tramite password, o trasportando il file in qualsiasi altra maniera.

Si presuppone ovviamente che sul server remoto sia già installato il pacchetto OpenSSH. Non preoccupatevi se il file non esiste, semplicemente createlo vuoto e poi accodate il contenuto.

3. Trasporto della chiave privata

Se avete generato le chiavi dalla stessa macchina Linux che userete poi per connettervi, non dovrete fare altro. Altrimenti:

  • se vi collegate da un’altra macchina Linux, dovrete semplicemente trasportare il file su tale macchina. Attenzione: tale file è una chiave di accesso al server, proteggetelo e usate solo strumenti sicuri per il trasporto.
  • se vi collegate da una macchina Windows dovete trasportare il file e poi usare il programma PuttyGen per trasformarla in un formato leggibile da Putty.

4. Uso della chiave privata

La chiave privata può essere situata dove volete, anche si consiglia di metterla in una cartella privata nella vostra home directory.

Da Linux, il parametro per autenticarsi tramite chiave è -i, ad esempio

ssh -i /home/user/.ssh/id_rsa server

dove ovviamente “user” è il vostro nome utente e “server” e il server a cui vi collegate. Nota: potete tranquillamente rinominare il file “id_rsa” in modo che da poter usare diverse chiavi.

Da Windows, nella scheda “Auth” dei parametri di sessione di Putty potete andare a selezionare la chiave privata generata precedentemente.

Fatto! A questo punto dovreste essere in grado di collegarvi senza dover digitare nessuna password.

Possibili problemi

  1. Controllare i permessi sui file contenuti nella cartella .ssh. Devono essere in modalità 600, ovvero lettura / scrittura solo dall’utente proprietario; e l’utente proprietario deve essere l’utente che accede (cioè quello nella cui home directory si trovano i file).
  2. Controllare il file di configurazione di ssh sul server remoto /etc/ssh/sshd_config. Verificare che sia abilitata l’autenticazione tramite chiavi, cercando la riga:

PubkeyAuthentication yes

linux, sicurezza, sistemista

Comment

I commenti sono chiusi.