La password è il punto debole di qualsiasi server esposto su Internet. Può essere indovinata, riutilizzata, intercettata o violata tramite attacco brute force. L'autenticazione tramite chiave SSH risolve il problema alla radice: invece di un segreto che si digita, si utilizza una coppia di chiavi crittografiche quasi impossibili da indovinare. È più sicuro e, nella vita quotidiana, è anche più pratico: non ci sono più password da inserire ad ogni accesso.
Questa guida copre tutto il ciclo di vita di una chiave SSH su un VPS Linux: comprendere il principio, generare una coppia di chiavi moderna con ssh-keygen, installarla sul server, connettersi, utilizzare l'agente SSH e poi disabilitare completamente l'autenticazione tramite password per bloccare l'accesso.
Come funziona una coppia di chiavi SSH?
L'autenticazione tramite chiave si basa su due file complementari:
- La chiave privata rimane sul tuo computer. Non deve mai lasciare la tua macchina né essere condivisa. È il tuo segreto.
- La chiave pubblica viene depositata sul server. Può circolare liberamente: conoscere la chiave pubblica non consente di ricostruire la chiave privata.
Durante la connessione, il server invia una sfida che solo la corrispondente chiave privata può risolvere. Se la prova è valida, l'accesso viene concesso senza che alcun segreto transiti sulla rete. È questo che rende il metodo sia più sicuro di una password che resistente all'ascolto.
Requisiti
- Accesso al tuo VPS sotto Linux (Ubuntu, Debian...), in SSH.
- Un terminale sul tuo computer: Terminale su macOS/Linux, o PowerShell / Windows Terminal su Windows (OpenSSH è integrato da Windows 10).
- Alcuni minuti. È il tutorial più semplice del percorso di sicurezza e il più conveniente.
Generare una coppia di chiavi SSH con ssh-keygen
La generazione avviene su tuo computer, non sul server. Apri il tuo terminale e lancia:
ssh-keygen -t ed25519 -C "[email protected]"
Alcune spiegazioni:
-t ed25519sceglie l'algoritmo. Ed25519 è oggi lo standard raccomandato: chiavi corte, molto veloci e molto sicure. Se devi interagire con un sistema obsoleto che non lo supporta, ripiegati su-t rsa -b 4096.-Caggiunge un commento (tipicamente la tua email) per identificare la chiave in seguito.
ssh-keygen pone poi due domande:
- La posizione del file: conferma il percorso predefinito (
~/.ssh/id_ed25519) premendo Invio. - Una frase segreta (passphrase): è una password che cripta la tua chiave privata sul disco. Scegline una. Così, anche se il tuo computer viene compromesso, la chiave rubata rimane inutilizzabile. L'agente SSH (vedi sotto) ti eviterà di doverla reinserire ad ogni connessione.
Due file vengono creati in ~/.ssh/:
id_ed25519 → la tua chiave privata (da mantenere segreta)
id_ed25519.pub → la tua chiave pubblica (da depositare sul server)
Installare la chiave pubblica sul server
Lo scopo è aggiungere la tua chiave pubblica al file ~/.ssh/authorized_keys del tuo utente sul VPS. Il metodo più semplice è ssh-copy-id:
ssh-copy-id utente@IP_DEL_SERVER
Il comando ti chiede una ultima volta la tua password (quella del server), poi copia e configura tutto automaticamente, con i permessi corretti. È finita.
Se ssh-copy-id non è disponibile (sotto Windows, ad esempio), il metodo manuale funziona ovunque:
type $env:USERPROFILE\.ssh\id_ed25519.pub | ssh utente@IP_DEL_SERVER "mkdir -p ~/.ssh && chmod 700 ~/.ssh && cat >> ~/.ssh/authorized_keys && chmod 600 ~/.ssh/authorized_keys"
Sotto macOS/Linux, l'equivalente:
cat ~/.ssh/id_ed25519.pub | ssh utente@IP_DEL_SERVER "mkdir -p ~/.ssh && chmod 700 ~/.ssh && cat >> ~/.ssh/authorized_keys && chmod 600 ~/.ssh/authorized_keys"
Connettersi con la propria chiave
Testa immediatamente la connessione tramite chiave, prima di toccare qualsiasi altra cosa:
ssh utente@IP_DEL_SERVER
Se hai impostato una frase segreta, ti verrà richiesta (è quella della chiave, non quella del server). Sei connesso senza la password del server: la chiave funziona. Passa alla fase di disattivazione della password solo dopo aver confermato questa connessione.
Utilizzare l'agente SSH per non dover reinserire la passphrase
Digitare la frase segreta ad ogni connessione diventa rapidamente noioso. L'agente SSH mantiene la tua chiave sbloccata in memoria per la durata della tua sessione. Avvialo e poi aggiungi la tua chiave:
eval "$(ssh-agent -s)"
ssh-add ~/.ssh/id_ed25519
Inserisci la passphrase una sola volta; le connessioni successive sono trasparenti. Sotto macOS, puoi salvare la chiave nel portachiavi di sistema con ssh-add --apple-use-keychain. Sotto Windows, attiva il servizio ssh-agent (Get-Service ssh-agent | Set-Service -StartupType Automatic) e poi ssh-add.
Per elencare le chiavi attualmente caricate nell'agente:
ssh-add -l
Il file di configurazione SSH (bonus pratico)
Per non dover digitare l'IP e l'utente, crea un collegamento in ~/.ssh/config sul tuo computer:
Host monvps
HostName 203.0.113.10
User monutilisateur
IdentityFile ~/.ssh/id_ed25519
Una semplice comando ssh monvps è quindi sufficiente per connettersi.
Disabilitare l'autenticazione tramite password
È il passo che blocca realmente il tuo server: una volta confermata la connessione tramite chiave, si vieta totalmente la password. Così, anche il miglior attacco brute force non serve più a nulla.
Avvertenza: non fare questo se non dopo aver verificato che la connessione tramite chiave funzioni. Tieni idealmente una seconda sessione SSH aperta durante la manipolazione, come rete di sicurezza.
Sul server, modifica la configurazione del demone SSH:
sudo nano /etc/ssh/sshd_config
Assicurati di avere queste direttive (decommentale e aggiusta i valori):
PubkeyAuthentication yes
PasswordAuthentication no
ChallengeResponseAuthentication no
PermitRootLogin prohibit-password
PermitRootLogin prohibit-password consente root solo tramite chiave (o lo disabilita con no se passi sempre tramite un utente sudo, il che è preferibile). Salva, poi ricarica il servizio:
sudo systemctl restart ssh
Su alcune distribuzioni recenti, la configurazione può essere sovrascritta da un file in /etc/ssh/sshd_config.d/. Se PasswordAuthentication no sembra ignorato, controlla questa cartella. Prova poi una nuova connessione: la password non deve più essere accettata.
Buone pratiche
- Una chiave per dispositivo. Genera una coppia distinta su ogni macchina da cui ti connetti, piuttosto che copiare la stessa chiave privata ovunque. In caso di perdita di un dispositivo, rimuovi semplicemente la sua chiave pubblica dal server.
- Proteggi la chiave privata con una passphrase. Una chiave privata senza frase segreta offre accesso totale a chiunque metta le mani sul file.
- Non condividere mai la chiave privata. Solo il file
.pubviene trasmesso. - Fai il backup delle tue chiavi in un luogo sicuro: perdere la chiave privata significa perdere l'accesso configurato.
- Combina con un firewall. Limitare la porta SSH e aprire solo il necessario rafforza l'intero sistema, vedi il passo UFW del percorso qui sotto.
Risoluzione dei problemi: « Permission denied (publickey) »
È l'errore più comune e deriva quasi sempre dai permessi dei file. SSH rifiuta di utilizzare una cartella o un file di chiavi troppo permissivo. Sul server, correggi:
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys
Altre piste comuni:
- Utente o chiave errati: verifica che ti stai connettendo con il giusto account e che la chiave privata corrispondente sia presente (
ssh -i ~/.ssh/id_ed25519 utente@IP). - Diagnosi dettagliata: aggiungi
-v(o-vvv) al tuo comandosshper vedere precisamente quale chiave viene proposta e dove si blocca. - authorized_keys malformato: la chiave pubblica deve stare su una sola riga.
Domande frequenti
Ed25519 o RSA? Ed25519 per qualsiasi server moderno: più corta, più veloce, altrettanto sicura. RSA 4096 rimane un ripiego valido per sistemi obsoleti.
Cosa fare se perdo la mia chiave privata? Non potrai più connetterti con essa. Riconnettiti in un altro modo (un'altra chiave, console di emergenza del VPS), poi rimuovi la vecchia chiave pubblica da authorized_keys e aggiungine una nuova.
Posso usare la stessa chiave su più server? Tecnicamente sì: basta depositare la stessa chiave pubblica su ciascuno. Ma è preferibile avere una chiave per workstation piuttosto che una chiave unica duplicata su tutte le tue macchine.
Le chiavi SSH funzionano su Windows? Sì, OpenSSH è integrato in Windows 10 e 11. Tutti i comandi di questa guida funzionano in PowerShell o Windows Terminal.
Il percorso di sicurezza del tuo server
L'autenticazione tramite chiave è il primo mattone di un server ben difeso, quello che chiude la porta d'ingresso. Per completare il processo sul tuo VPS Linux, prosegui con il resto del percorso:
- Chiavi SSH sostituire la password con un'autenticazione tramite chiavi (sei qui).
- UFW chiudere tutte le porte non necessarie con un firewall semplice (guida in arrivo).
- Fail2ban bannare automaticamente gli attaccanti che insistono (guida in arrivo).
- Certbot crittografare i tuoi servizi con un certificato SSL Let's Encrypt (guida in arrivo).
Trova tutti i nostri tutorial nella documentazione Linux. In meno di dieci minuti, trasformerai l'accesso al tuo server: da « password vulnerabile » a « chiave crittografica impossibile da indovinare ».
