Introduzione alle Chiavi SSH
Le chiavi SSH (Secure Shell) offrono un metodo di autenticazione molto più sicuro rispetto alle password tradizionali. Invece di digitare una password ad ogni accesso, si utilizza una coppia di chiavi crittografiche:
- Chiave privata : Rimane sul tuo computer locale (non condividerla mai)
- Chiave pubblica : Installata sul server VPS
Quando ti connetti, il server verifica che la tua chiave privata corrisponda alla chiave pubblica registrata. Se la corrispondenza è convalidata, sei autenticato istantaneamente.
Vantaggi delle chiavi SSH
| Aspetto | Password | Chiave SSH |
|---|---|---|
| Sicurezza | Vulnerabile ad attacchi brute-force | Quasi impossibile da decifrare |
| Comodità | Inserimento manuale ad ogni connessione | Connessione automatica |
| Condivisione | Rischio se divulgata | Chiave pubblica condivisibile senza rischio |
| Lunghezza | Generalmente 8-20 caratteri | 2048-4096 bit di crittografia |
| Automazione | Difficile da scriptare | Ideale per script |
🖥️ Metodo 1 : Generare una Chiave SSH su Windows con PuTTY
Passo 1 : Scaricare PuTTY e PuTTYgen
PuTTY è il client SSH più popolare per Windows. PuTTYgen è l'utilità di generazione di chiavi inclusa.
- Visita il sito ufficiale : https://www.putty.org/
- Scarica il pacchetto di installazione MSI (64-bit o 32-bit a seconda del tuo sistema)
- Installa PuTTY - PuTTYgen sarà automaticamente incluso
Puoi anche scaricare solo puttygen.exe se hai già PuTTY.
Il file puttygen.exe scaricato
Passo 2 : Avviare PuTTYgen
-
Apri PuTTYgen tramite :
- Menu Start → Tutti i programmi → PuTTY → PuTTYgen
- Oppure fai doppio clic su
puttygen.exe
-
L'interfaccia di generazione delle chiavi appare :
Interfaccia principale di PuTTYgen
Passo 3 : Configurare le impostazioni
Prima di generare la chiave, controlla le impostazioni in fondo alla finestra :
| Impostazione | Valore raccomandato | Descrizione |
|---|---|---|
| Tipo di chiave | RSA o EdDSA (Ed25519) | Algoritmo di crittografia |
| Numero di bit | 4096 (RSA) o 256 (Ed25519) | Lunghezza della chiave |
💡 Raccomandazione : Per la massima sicurezza, scegli RSA 4096 bit o EdDSA (Ed25519) che è più moderno e performante.
Passo 4 : Generare la coppia di chiavi
- Clicca sul pulsante Generate
- Importante : Muovi il mouse in modo casuale nell'area vuota per generare entropia (random cryptografico)
Muovi il mouse per generare casualità
- Attendi che la barra di avanzamento si riempia
Passo 5 : Configurare e salvare le chiavi
Una volta generata la chiave, vedrai questo schermo :
Chiave SSH generata con successo
Aggiungere una passphrase (raccomandato)
La passphrase aggiunge un ulteriore livello di sicurezza. Anche se qualcuno ottiene la tua chiave privata, non potrà utilizzarla senza la passphrase.
Inserimento della passphrase
- In Key passphrase, inserisci una frase segreta
- Conferma in Confirm passphrase
Salvare la chiave privata
- Clicca su Save private key
- Scegli una posizione sicura
- Dai un nome al file (es:
ma_cle_vps.ppk)
Pulsante Save private key
Registrazione del file .ppk
Salvare la chiave pubblica
- Clicca su Save public key
- Dai un nome al file (es:
ma_cle_vps.pub)
Registrazione della chiave pubblica
Copiare la chiave pubblica nel formato OpenSSH
Importante : Per i server Linux, devi copiare la chiave nel formato OpenSSH :
- Seleziona tutto il testo nell'area "Public key for pasting into OpenSSH authorized_keys file"
- Copia (Ctrl+C)
- Mettila da parte per il passo successivo
Il formato appare come :
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQDx... rsa-key-20241210
Passo 6 : Configurare PuTTY per utilizzare la chiave
- Apri PuTTY
- Nel menu a sinistra, naviga verso : Connection → SSH → Auth → Credentials
Sezione Credentials in PuTTY
- Clicca su Browse accanto a "Private key file for authentication"
Selezione della chiave privata
- Seleziona il tuo file
.ppk
File .ppk selezionato
- Torna a Session, inserisci l'IP del tuo VPS e salva la sessione
🐧 Metodo 2 : Generare una Chiave SSH su Linux/macOS
Passo 1 : Aprire il Terminale
- Linux : Ctrl+Alt+T o cerca "Terminale"
- macOS : Applicazioni → Utility → Terminale
Passo 2 : Generare la coppia di chiavi
Opzione A : Chiave RSA 4096 bit (compatibile universalmente)
ssh-keygen -t rsa -b 4096 -C "[email protected]"
Opzione B : Chiave Ed25519 (raccomandata, più moderna)
ssh-keygen -t ed25519 -C "[email protected]"
Passo 3 : Seguire le istruzioni
Generating public/private ed25519 key pair.
Enter file in which to save the key (/home/utente/.ssh/id_ed25519):
- Posizione : Premi Invio per accettare la posizione predefinita (
~/.ssh/id_ed25519)
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
- Passphrase : Inserisci una frase segreta (raccomandato) o premi Invio per nessuna
Passo 4 : Verificare la creazione
ls -la ~/.ssh/
Dovresti vedere :
id_ed25519(oid_rsa) - Chiave privataid_ed25519.pub(oid_rsa.pub) - Chiave pubblica
Passo 5 : Visualizzare la chiave pubblica
cat ~/.ssh/id_ed25519.pub
Risultato :
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAI... [email protected]
Copia questa riga completa per installarla sul server.
🚀 Installare la Chiave Pubblica sul VPS
Metodo 1 : Con ssh-copy-id (Linux/macOS - Raccomandato)
Il comando ssh-copy-id automatizza l'installazione :
ssh-copy-id -i ~/.ssh/id_ed25519.pub utente@IP_DEL_VPS
Esempio :
ssh-copy-id -i ~/.ssh/id_ed25519.pub [email protected]
Dovrai inserire la tua password un'ultima volta. Poi, la chiave sarà installata automaticamente.
Metodo 2 : Installazione manuale
Se ssh-copy-id non è disponibile :
Passo 1 : Connettersi al VPS con password
ssh root@IP_DEL_VPS
Passo 2 : Creare la cartella .ssh (se necessario)
mkdir -p ~/.ssh
chmod 700 ~/.ssh
Passo 3 : Creare/modificare il file authorized_keys
nano ~/.ssh/authorized_keys
Passo 4 : Incollare la chiave pubblica
Incolla la chiave pubblica copiata in precedenza (una sola riga).
Per PuTTY, è il contenuto di "Public key for pasting into OpenSSH authorized_keys file".
Passo 5 : Salvare e impostare i permessi
chmod 600 ~/.ssh/authorized_keys
Passo 6 : Testare la connessione
Disconnettiti e riconnettiti :
exit
ssh root@IP_DEL_VPS
Se tutto funziona, ti connetterai senza password (o con la tua passphrase se ne hai definita una).
Metodo 3 : In un solo comando (dal tuo PC locale)
cat ~/.ssh/id_ed25519.pub | ssh root@IP_DEL_VPS "mkdir -p ~/.ssh && chmod 700 ~/.ssh && cat >> ~/.ssh/authorized_keys && chmod 600 ~/.ssh/authorized_keys"
🔒 Sicurezza del Server SSH
Una volta configurate le chiavi SSH, rafforza la sicurezza disabilitando l'autenticazione tramite password.
Passo 1 : Modificare la configurazione SSH
sudo nano /etc/ssh/sshd_config
Passo 2 : Modificare le impostazioni
Cerca e modifica queste righe :
# Disabilitare l'autenticazione tramite password
PasswordAuthentication no
# Disabilitare le password vuote
PermitEmptyPasswords no
# Abilitare l'autenticazione tramite chiave pubblica
PubkeyAuthentication yes
# Disabilitare l'autenticazione challenge-response
ChallengeResponseAuthentication no
# Opzionale : Disabilitare il login root (crea prima un utente sudo)
# PermitRootLogin no
Passo 3 : Riavviare il servizio SSH
sudo systemctl restart sshd
⚠️ Attenzione : Tieni aperta una sessione SSH durante i test! Se la configurazione è errata, potresti perdere l'accesso.
🛠️ Gestione delle Chiavi SSH
Aggiungere più chiavi
Puoi autorizzare più chiavi (più computer, più utenti) :
nano ~/.ssh/authorized_keys
Aggiungi una chiave per riga.
Rimuovere una chiave
Modifica authorized_keys e rimuovi la riga corrispondente alla chiave.
Cambiare la passphrase di una chiave esistente
ssh-keygen -p -f ~/.ssh/id_ed25519
Visualizzare l'impronta (fingerprint) di una chiave
ssh-keygen -lf ~/.ssh/id_ed25519.pub
🔄 Convertire i Formati delle Chiavi
PPK verso OpenSSH (PuTTY → Linux)
In PuTTYgen :
- Carica il tuo file
.ppkcon Load - Vai su Conversions → Export OpenSSH key
- Salva il file
OpenSSH verso PPK (Linux → PuTTY)
In PuTTYgen :
- Vai su Conversions → Import key
- Seleziona la tua chiave privata OpenSSH (
id_rsaoid_ed25519) - Clicca su Save private key
🔧 Risoluzione dei Problemi
"Permission denied (publickey)"
Cause possibili :
- Chiave pubblica non installata sul server
- Permessi errati su
.sshoauthorized_keys - Chiave privata errata utilizzata
Soluzioni :
# Controllare i permessi (sul server)
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys
# Controllare che la chiave sia presente in authorized_keys
cat ~/.ssh/authorized_keys
"Connection refused"
Cause possibili :
- Servizio SSH non avviato
- Firewall che blocca la porta 22
Soluzioni :
# Controllare lo stato SSH
sudo systemctl status sshd
# Riavviare se necessario
sudo systemctl start sshd
# Controllare il firewall
sudo ufw status
sudo ufw allow 22
"Host key verification failed"
Il server è cambiato (reinstallazione, nuovo IP). Rimuovi la vecchia voce :
ssh-keygen -R IP_DEL_VPS
La passphrase viene richiesta ad ogni connessione
Utilizza ssh-agent per memorizzare la passphrase :
# Avviare l'agente
eval "$(ssh-agent -s)"
# Aggiungere la chiave
ssh-add ~/.ssh/id_ed25519
📋 Riepilogo dei Comandi
| Azione | Comando |
|---|---|
| Generare chiave RSA 4096 | ssh-keygen -t rsa -b 4096 |
| Generare chiave Ed25519 | ssh-keygen -t ed25519 |
| Copiare chiave sul server | ssh-copy-id -i ~/.ssh/id_ed25519.pub user@IP |
| Visualizzare chiave pubblica | cat ~/.ssh/id_ed25519.pub |
| Testare connessione verbose | ssh -v user@IP |
| Cambiare passphrase | ssh-keygen -p -f ~/.ssh/id_ed25519 |
| Vedere fingerprint | ssh-keygen -lf ~/.ssh/id_ed25519.pub |
📁 Struttura dei File SSH
~/.ssh/
├── authorized_keys # Chiavi pubbliche autorizzate (sul server)
├── id_ed25519 # Chiave privata Ed25519 (sul client)
├── id_ed25519.pub # Chiave pubblica Ed25519 (sul client)
├── id_rsa # Chiave privata RSA (sul client)
├── id_rsa.pub # Chiave pubblica RSA (sul client)
├── known_hosts # Impronte dei server conosciuti
└── config # Configurazione personalizzata (opzionale)
Permessi richiesti
| File/Cartella | Permesso | Comando |
|---|---|---|
~/.ssh/ | 700 | chmod 700 ~/.ssh |
authorized_keys | 600 | chmod 600 ~/.ssh/authorized_keys |
| Chiave privata | 600 | chmod 600 ~/.ssh/id_ed25519 |
| Chiave pubblica | 644 | chmod 644 ~/.ssh/id_ed25519.pub |
💡 Buone Pratiche
-
Utilizza Ed25519 per le nuove chiavi (più sicuro e performante rispetto a RSA)
-
Definisci sempre una passphrase sulle tue chiavi private
-
Non condividere mai la tua chiave privata - solo la chiave pubblica deve essere copiata
-
Salva le tue chiavi in un luogo sicuro (gestore di password, cassaforte)
-
Utilizza chiavi diverse per usi diversi (lavoro, personale, server critici)
-
Disabilita l'autenticazione tramite password una volta configurate le chiavi
-
Audita regolarmente il file
authorized_keysper rimuovere le chiavi non utilizzate -
Cambia le tue chiavi periodicamente (ogni 1-2 anni minimo)
❓ FAQ
Qual è la differenza tra RSA ed Ed25519 ?
| Aspetto | RSA | Ed25519 |
|---|---|---|
| Sicurezza | Eccellente (4096 bit) | Eccellente (256 bit) |
| Performance | Più lento | Più veloce |
| Dimensione della chiave | Grande | Piccola |
| Compatibilità | Universale | Molto buona (post-2014) |
Raccomandazione : Ed25519 per i nuovi deployment, RSA per la compatibilità con sistemi più vecchi.
Posso utilizzare la stessa chiave per più server ?
Sì, puoi installare la stessa chiave pubblica su più server. Tuttavia, per una sicurezza ottimale, utilizza chiavi diverse per ambienti critici.
Come aggiungere un commento alla mia chiave ?
Il parametro -C consente di aggiungere un commento :
ssh-keygen -t ed25519 -C "laptop-lavoro-2024"
Le chiavi SSH scadono ?
No, le chiavi SSH non hanno una data di scadenza integrata. Spetta a te ruotarle regolarmente.
