Per collegarsi ai propri server in modo sicuro, è possibile utilizzare le chiavi SSH. Questo metodo sfrutta la crittografia asimmetrica (chiave pubblica e chiave privata) per stabilire una connessione autenticata e protetta, eliminando la necessità di inserire password.

La Crittografia Asimmetrica

La crittografia asimmetrica è un sistema che utilizza due chiavi matematicamente correlate ma distinte: una pubblica e una privata. La caratteristica fondamentale è che ciò che viene cifrato con una chiave può essere decifrato solo con l’altra.

Caratteristica Chiave Privata Chiave Pubblica (.pub)
Dove si trova Solo sul tuo computer (~/.ssh/) Sui server remoti (~/.ssh/authorized_keys)
Condivisione Mai condividere Può essere distribuita liberamente
Funzione Dimostra la tua identità Verifica l’identità di chi si collega
Permessi file 600 (solo proprietario) 644 (leggibile da tutti)

In sintesi, la coppia di chiavi è composta da: una chiave privata che deve essere custodita e mai condivisa, che serve per verificare la tua identità, e una chiave pubblica da distribuire sui server a cui vuoi accedere.

Generare una Chiave SSH

In questo esempio andremo a generare una chiave SSH utilizzando come metodo di cifratura l’algoritmo Ed25519 , che al momento della scrittura di questa guida è considerato il più moderno e sicuro disponibile. Utilizza curve ellittiche (Curve25519), produce chiavi corte ma estremamente sicure, ed è supportato da OpenSSH 6.5+ (2014). Per generare la chiave è possibile utilizzare il seguente comando (da modificare nei parametri).

bash
ssh-keygen -t ed25519 -C "accesso-server-produzione" -f ~/.ssh/produzione

Nello specifico, i parametri utilizzati per la generazione di questa chiave sono descritti nella tabella sottostante.

Parametro Descrizione
-t ed25519 Specifica l’algoritmo di crittografia
-C "accesso-server-produzione" Aggiunge un commento identificativo alla chiave
-f ~/.ssh/produzione Percorso e nome del file della chiave

Durante il processo di generazione ti verrà chiesto se vuoi inserire una Passphrase (ossia una password) per proteggere la chiave privata. È opzionale ma da molti consigliata, in quanto se qualcuno dovesse accedere al tuo filesystem, senza la passphrase da te inserita la chiave sarebbe inutilizzabile.

Dopo l’esecuzione troverai due file: ~/.ssh/produzione che è la chiave privata (da non condividere MAI) e ~/.ssh/produzione.pub che è la chiave pubblica (da copiare sui server).

Installare la Chiave sul Server

Questo sistema è considerato molto più sicuro rispetto a una password tradizionale, in quanto la chiave privata non viene mai trasmessa sulla rete. Il processo di login avviene in questo modo:

  1. Tu generi una coppia di chiavi sul tuo computer (privata e pubblica)
  2. Copi la chiave pubblica sul server remoto
  3. Quando ti colleghi, il server invia una “sfida” cifrata con la tua chiave pubblica
  4. Solo tu, possedendo la chiave privata, puoi decifrare la sfida e dimostrare la tua identità

Per installare la chiave sul server remoto in modo automatico, utilizza il comando qui sotto. Questo provvederà a copiare la chiave pubblica nella cartella ~/.ssh, impostare i permessi corretti e aggiungere la chiave al file authorized_keys.

bash
ssh-copy-id -i ~/.ssh/produzione.pub utente@120.121.122.123

Alla prima esecuzione del comando ti verrà chiesta la password dell’utente remoto, per verificare la validità dell’account e i suoi permessi, e quindi abbinare quella chiave all’utente. Successivamente non verrà più richiesta alcuna password.

Permessi dei file

SSH è molto rigoroso sui permessi dei file. Se i permessi sono troppo aperti (es. 777), rifiuterà l’autenticazione per motivi di sicurezza.

Stabilire una Connessione

Una volta eseguita la configurazione su entrambi i sistemi (client e server), sarà possibile utilizzare la chiave SSH per accedere al server. Per farlo, è necessario indicare quale chiave utilizzare durante la richiesta di connessione.

bash
ssh -i ~/.ssh/produzione utente@120.121.122.123

Se tutto è configurato correttamente, accederai senza inserire la password (o inserendo solo la passphrase della chiave, se l’hai impostata).

Creare un Alias

Per evitare di dover indicare ogni volta il percorso della chiave e specificare a quale server connettersi, è possibile configurare un alias. Richiede un piccolo investimento di tempo iniziale, ma ti farà risparmiare molto tempo e ti semplificherà la vita.

Per configurare un alias, modifica il file ~/.ssh/config con il seguente comando.

bash
nano ~/.ssh/config

Aggiungi i parametri della connessione, strutturati come nell’esempio sotto:

Host nome-alias
    HostName 120.121.122.123
    User utente
    IdentityFile ~/.ssh/produzione

Ora puoi connetterti semplicemente digitando nel terminale:

bash
ssh nome-alias

Buone Pratiche di Sicurezza

Le chiavi SSH sono un ottimo metodo per connettersi a server remoti, ma è comunque necessario seguire alcune regole per aumentare il livello di sicurezza.

  1. Usa sempre una passphrase per le chiavi private, in modo che non possano essere utilizzate da altri semplicemente “copiando” il file della chiave
  2. Non riutilizzare la stessa chiave per tutti i server: se la chiave viene compromessa, si compromette l’intero sistema
  3. Esegui un backup sicuro delle chiavi private (ad esempio in un password manager)
  4. Revoca le chiavi quando non servono più (rimuovile dal file authorized_keys)