Creare e usare chiavi SSH
Modulo 2: SSH e chiavi · Tempo di lettura: 10 minuti
Obiettivo della lezione: Al termine di questa lezione saprà creare una coppia di chiavi, mettere la chiave pubblica sul Suo server, accedere senza password e custodire la Sua chiave privata in modo che un portatile smarrito non diventi una catastrofe.
Concetti chiave: coppia di chiavi, chiave pubblica, chiave privata, ed25519, RSA, passphrase, ssh-agent, ssh-copy-id, authorized_keys, permessi 700 e 600, una chiave per dispositivo, chiave FIDO2
Perché le chiavi sono meglio delle password
Nella lezione 1.3 ha effettuato l'accesso con una password. Funziona, ma un server su internet riceve fin dal primo minuto la visita di programmi che cercano di indovinare le password. Basta dare un'occhiata al log di un server appena installato:
root@web1:~# journalctl -u ssh --since "1 hour ago" | grep -c "Failed password"
214Centinaia di tentativi all'ora sono normali. Una password robusta li ferma, ma ha creato un punto debole di cui non ha bisogno. Con una chiave SSH indovinare è inutile: non c'è nulla da indovinare che si trovi in un elenco di parole.
Una chiave è composta da due parti che vanno insieme, una coppia di chiavi:
- La chiave privata rimane sul Suo computer. Chi possiede questo file (e conosce la passphrase) può accedere. Non la condivida con nessuno, nemmeno con il Suo provider o con un servizio di assistenza.
- La chiave pubblica la consegna al server. Può vederla chiunque: con essa non si può accedere, solo verificare.
Durante l'accesso il server non invia alcuna password sulla linea. Il Suo computer dimostra con una firma di possedere la chiave privata, e il server verifica quella firma con la chiave pubblica. Anche se qualcuno osserva il traffico di rete, non vede nulla che possa riutilizzare in seguito.
Creare una chiave
La chiave si crea sul Suo computer, non sul server. Su Windows 10 e 11, macOS e Linux ssh-keygen è già incluso. Apra PowerShell o Terminale:
anna@laptop:~$ ssh-keygen -t ed25519 -C "anna@laptop 2026"
Generating public/private ed25519 key pair.
Enter file in which to save the key (/home/anna/.ssh/id_ed25519):
Enter passphrase for "/home/anna/.ssh/id_ed25519" (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/anna/.ssh/id_ed25519
Your public key has been saved in /home/anna/.ssh/id_ed25519.pub
The key fingerprint is:
SHA256:q3J8vX0bT2kPz9mWc1nR4sLh7uYdE5aF6gBiC0oN2xQ anna@laptop 2026Che cosa succede qui?
-t ed25519sceglie il tipo. Ed25519 è corto, veloce e sicuro, e da OpenSSH 9.5 è anche il tipo predefinito se non ne indica nessuno. Se deve servire un sistema vecchio che non conosce ed25519, usi RSA con almeno 3072 bit:ssh-keygen -t rsa -b 4096. I tipi più vecchi come DSA sono stati rimossi da OpenSSH; non li usi.-Cè solo un commento. Vi inserisca qualcosa da cui in seguito capirà a quale dispositivo appartiene la chiave. Aiuta moltissimo quando deve revocare una chiave.- La passphrase cifra la chiave privata sul Suo disco. Se il Suo portatile viene rubato, il ladro ha un file cifrato. Senza passphrase ha accesso immediato a tutti i Suoi server.
Ora ha due file:
| File | Che cosa | Condividere? |
|---|---|---|
~/.ssh/id_ed25519 | Chiave privata | Mai |
~/.ssh/id_ed25519.pub | Chiave pubblica, una riga di testo | Sì, al server |
Su Windows si trovano in C:\Users\anna\.ssh\. La chiave pubblica è una riga che inizia con ssh-ed25519:
anna@laptop:~$ cat ~/.ssh/id_ed25519.pub
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIHk2... anna@laptop 2026Mettere la chiave pubblica sul server
Il server cerca le chiavi pubbliche nel file ~/.ssh/authorized_keys dell'utente con cui accede. Ogni riga è una chiave. Ci sono tre modi per portarvi la Sua chiave:
1. Durante l'installazione. La maggior parte dei provider offre, alla creazione o reinstallazione di un VPS, un campo per la Sua chiave pubblica. In WebOké questo campo si chiama "Chiave SSH" nella schermata del VPS; presso altri provider funziona in modo simile. È il metodo migliore: così non serve mai attivare una password.
2. Con ssh-copy-id (macOS e Linux), mentre l'accesso con password funziona ancora:
anna@laptop:~$ ssh-copy-id anna@192.0.2.10
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed
anna@192.0.2.10's password:
Number of key(s) added: 13. A mano, per esempio da Windows o tramite la console del Suo provider. Incolli la riga del Suo file .pub in authorized_keys e imposti correttamente i permessi:
anna@web1:~$ mkdir -p ~/.ssh
anna@web1:~$ nano ~/.ssh/authorized_keys
anna@web1:~$ chmod 700 ~/.ssh
anna@web1:~$ chmod 600 ~/.ssh/authorized_keysQuei permessi non sono un dettaglio. Il server SSH li controlla (l'impostazione StrictModes è attiva per impostazione predefinita): se altri possono scrivere nella Sua cartella .ssh o nella Sua cartella home, ignora le Sue chiavi. Vedrà allora semplicemente di nuovo la richiesta della password, senza un messaggio di errore chiaro. Come leggere i permessi lo imparerà nella lezione 3.1.
Poi faccia una prova in una nuova finestra:
anna@laptop:~$ ssh anna@192.0.2.10
Enter passphrase for key '/home/anna/.ssh/id_ed25519':
anna@web1:~$La richiesta ora viene dal Suo computer (la passphrase della Sua chiave), non più dal server.
ssh-agent: sbloccare una sola volta
Digitare ogni volta una passphrase è scomodo. Lo ssh-agent conserva in memoria la Sua chiave sbloccata finché resta collegato al Suo computer:
anna@laptop:~$ ssh-add ~/.ssh/id_ed25519
Enter passphrase for /home/anna/.ssh/id_ed25519:
Identity added: /home/anna/.ssh/id_ed25519 (anna@laptop 2026)
anna@laptop:~$ ssh-add -l
256 SHA256:q3J8vX0bT2kPz9mWc1nR4sLh7uYdE5aF6gBiC0oN2xQ anna@laptop 2026 (ED25519)Su macOS l'agent si collega al portachiavi, su Windows è il servizio "OpenSSH Authentication Agent" (da attivare una volta in Servizi). Così ha la comodità di non digitare password e al tempo stesso una chiave cifrata sul disco.
Attenzione con l'agent forwarding (ssh -A): con esso il server a cui accede può usare il Suo agent. Chi è root su quel server può quindi proseguire con la Sua chiave. Lo usi solo su server di cui si fida completamente, oppure usi ProxyJump (lezione 2.3).
Una chiave per dispositivo, e sapere dove si trovano
Un errore frequente: copiare un'unica chiave privata su portatile, PC e telefono. Se perde un dispositivo, deve sostituire la chiave ovunque e riconfigurare tutti i dispositivi. Meglio così:
- crei su ogni dispositivo una chiave propria, con un commento chiaro (
-C "anna@telefoon"); - metta tutte le chiavi pubbliche in
authorized_keys, una per riga; - se perde un dispositivo, rimuova solo quella riga.
Controlli regolarmente quali chiavi hanno accesso:
anna@web1:~$ ssh-keygen -lf ~/.ssh/authorized_keys
256 SHA256:q3J8vX0bT2kPz9mWc1nR4sLh7uYdE5aF6gBiC0oN2xQ anna@laptop 2026 (ED25519)
256 SHA256:Zt5oP1yW8eQ3rK6sV0bN9mD2xA4cH7jL1uI5fG8tE3w anna@telefoon (ED25519)Se c'è una chiave che non riconosce, è un segnale d'allarme (lezione 10.3). Gli intrusi amano inserire la propria chiave in authorized_keys per tornare in seguito.
Una chiave hardware (FIDO2, come una YubiKey) è un'altra possibilità. Con ssh-keygen -t ed25519-sk la parte segreta si trova sulla chiave stessa e deve toccarla a ogni utilizzo. Un file rubato è allora inutile. È un bel passo avanti, ma non necessario per iniziare.
Ha perso la Sua chiave privata?
Se perde la Sua unica chiave privata e l'accesso con password è disattivato, non riesce più a entrare tramite SSH. Per questo:
- metta sempre almeno due chiavi sul server (per esempio portatile e PC);
- sappia come funziona la console del Suo provider (lezione 1.2). Lì accede come se collegasse una tastiera al server, e funziona anche senza SSH. In WebOké si chiama Console nella schermata del VPS; altri provider la chiamano console VNC, console web o console di emergenza.
Su AlmaLinux e Rocky Linux
Tutto ciò che è in questa lezione funziona allo stesso modo. Una trappola in più: con SELinux attivo, ~/.ssh deve avere l'etichetta di sicurezza corretta. Se ha creato o copiato la cartella a mano e la Sua chiave viene ignorata, restorecon -Rv ~/.ssh ripristina la situazione.
Riepilogo
- Una coppia di chiavi è composta da una chiave privata (rimane con Lei) e una chiave pubblica (va al server, in
~/.ssh/authorized_keys). - Crei le chiavi con
ssh-keygen -t ed25519sul Suo computer, con una passphrase; usi ssh-agent per comodità. - I permessi contano:
~/.ssha 700 eauthorized_keysa 600, altrimenti il server ignora la Sua chiave. - Una chiave per dispositivo, con un commento chiaro, così può revocarne una sola.
- Preveda una seconda chiave e conosca la console del Suo provider come accesso di emergenza.
Quiz
Esercizio
Esercizio O2.1: Creare e usare una chiave. Crei sul Suo computer una chiave ed25519 con una passphrase e un commento chiaro, la metta sul Suo server (tramite il campo del Suo provider, ssh-copy-id o a mano), controlli i permessi e acceda con la chiave in una nuova finestra. Poi inserisca l'impronta digitale della Sua chiave (da ssh-keygen -lf ~/.ssh/id_ed25519.pub) e risponda alle domande su dove si trova la Sua chiave privata e che cosa fa se la perde. Il programma controlla solo che l'impronta digitale abbia il formato corretto; il resto lo fa Lei.
Esercizio O2.1: Creare e usare una chiave
Questo esercizio lo svolge da sé; nessuno lo verifica. Spunti ciò che ha fatto e segni l'esercizio come completato.
La chiave privata resta sul Suo dispositivo, cifrata con una passphrase, non in una cartella cloud o in un'email. In caso di furto, rimuova la riga di quel dispositivo da authorized_keys su ogni server e crei una nuova chiave. Non incolli mai la Sua chiave privata, nemmeno qui.
Le Sue spunte e note restano solo in questo browser; non le inviamo da nessuna parte. Se ha effettuato l'accesso, conserviamo in I miei corsi solo il fatto che ha svolto l'esercizio.
Per approfondire
I passaggi descritti in questi articoli valgono per la schermata del VPS e i pannelli di WebOké; presso altri provider funziona in modo simile.
- Accedere al suo VPS con SSH (e creare una chiave SSH)
- Guida DirectAdmin 15.2: Chiavi SSH e accesso tramite SSH
- Nessun accesso alla sua VPS: cosa fare?
- Manuale di ssh-keygen: https://man.openbsd.org/ssh-keygen
- Note di rilascio di OpenSSH 9.5 (ed25519 predefinito): https://www.openssh.org/txt/release-9.5
