{"id":130,"date":"2026-06-14T20:31:19","date_gmt":"2026-06-14T20:31:19","guid":{"rendered":"https:\/\/shattered.io\/it\/2026\/06\/14\/chiavi-ssh-ed25519-hardening-server\/"},"modified":"2026-06-14T20:32:37","modified_gmt":"2026-06-14T20:32:37","slug":"chiavi-ssh-ed25519-hardening-server","status":"publish","type":"post","link":"https:\/\/shattered.io\/it\/2026\/06\/14\/chiavi-ssh-ed25519-hardening-server\/","title":{"rendered":"Chiavi SSH Ed25519: Hardening Server in 12 Step [2026]"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">Le password SSH sono il bersaglio numero uno dei bot che scansionano internet. Un server Ubuntu appena esposto sulla porta 22 riceve migliaia di tentativi di login al giorno, spesso entro pochi minuti dall&#8217;accensione. La difesa definitiva non \u00e8 una password pi\u00f9 lunga, ma l&#8217;eliminazione totale delle password a favore della crittografia a chiave pubblica. In questo tutorial configuri l&#8217;autenticazione SSH con chiavi <strong>Ed25519<\/strong>, generi la coppia con <strong>ssh-keygen<\/strong>, blindi <code>sshd_config<\/code> e installi fail2ban, fino a ottenere un server che accetta solo connessioni firmate crittograficamente.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Il percorso \u00e8 organizzato in 12 step concreti, con comandi pronti da incollare, esempi di output reali e una checklist finale. Lavoriamo su OpenSSH 10.3p1 (rilasciato il 2 aprile 2026) e Ubuntu Server, ma i comandi valgono identici su Debian, Rocky Linux e qualsiasi distribuzione moderna. Alla fine avrai un progetto completo: una postazione client e un server collegati senza password, con root disabilitato, brute-force mitigato e algoritmi resistenti al calcolo quantistico.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"perche-lautenticazione-ssh-con-chiavi-batte-le-password\">Perch\u00e9 l&#8217;autenticazione SSH con chiavi batte le password<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Una password, per quanto robusta, \u00e8 un segreto condiviso: viaggia (in forma cifrata) verso il server a ogni login e pu\u00f2 essere indovinata, intercettata via phishing o estratta da un database compromesso. Una chiave SSH funziona in modo radicalmente diverso. La parte privata non lascia mai il tuo computer. Il server conserva solo la chiave pubblica e lancia una sfida matematica che solo chi possiede la chiave privata pu\u00f2 risolvere. Nessun segreto transita sulla rete e non c&#8217;\u00e8 nulla da indovinare con la forza bruta.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">I numeri lo confermano. Un attaccante che tenta password contro la porta 22 ha probabilit\u00e0 realistiche di successo contro credenziali deboli o riutilizzate. Contro una chiave Ed25519 dovrebbe risolvere un problema di logaritmo discreto su curva ellittica, un&#8217;operazione che resta fuori dalla portata dei computer classici. Aggiungi che con <code>PasswordAuthentication no<\/code> il server smette del tutto di valutare le password, e i bot che riempiono <code>\/var\/log\/auth.log<\/code> ricevono un rifiuto immediato senza nemmeno arrivare alla fase di autenticazione.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">C&#8217;\u00e8 anche un fattore di igiene operativa. Le chiavi sono per macchina e per utente: puoi autorizzare il laptop di un collaboratore e revocarlo cancellando una riga da <code>authorized_keys<\/code>, senza cambiare nulla per gli altri. Con <code>ssh-agent<\/code> ti autentichi una volta e riutilizzi la sessione per decine di server, eliminando la tentazione di scegliere password facili da digitare. La chiave privata, protetta da una passphrase, resta cifrata sul disco anche se il portatile viene rubato.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"come-funziona-la-crittografia-a-chiave-pubblica-in-ssh\">Come funziona la crittografia a chiave pubblica in SSH<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">SSH usa la crittografia asimmetrica. Quando esegui <code>ssh-keygen<\/code> generi due file matematicamente legati: la chiave privata (per esempio <code>~\/.ssh\/id_ed25519<\/code>) e la chiave pubblica (<code>~\/.ssh\/id_ed25519.pub<\/code>). Ci\u00f2 che firmi con la privata si verifica solo con la pubblica corrispondente, e dalla pubblica \u00e8 computazionalmente impossibile risalire alla privata.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Durante la connessione il flusso \u00e8 questo: il client annuncia quale chiave pubblica intende usare, il server controlla che quella chiave sia presente in <code>~\/.ssh\/authorized_keys<\/code> dell&#8217;utente, poi invia una sfida basata sulla sessione corrente. Il client firma la sfida con la chiave privata e rimanda la firma. Il server la verifica con la chiave pubblica registrata. Se la firma \u00e8 valida, l&#8217;accesso \u00e8 concesso. Tutto questo avviene dopo che client e server hanno gi\u00e0 negoziato un canale cifrato tramite uno scambio di chiavi (key exchange), quindi anche i metadati dell&#8217;autenticazione viaggiano protetti.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Il concetto \u00e8 lo stesso che protegge le connessioni web e la posta cifrata. Se vuoi approfondire le fondamenta, abbiamo spiegato il meccanismo delle <a href=\"\/it\/firme-digitali\/\">firme digitali<\/a> e il funzionamento di <a href=\"\/it\/https-e-tls\/\">HTTPS e TLS<\/a>, che condividono con SSH la stessa logica di scambio asimmetrico. La differenza pratica \u00e8 che in SSH gestisci tu, manualmente, l&#8217;elenco delle chiavi autorizzate su ogni macchina.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"step-1-prerequisiti-e-versioni-del-2026\">Step 1: Prerequisiti e versioni del 2026<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Prima di iniziare, allinea l&#8217;ambiente. Questo tutorial presuppone due macchine: un client (il tuo laptop, Linux o macOS, oppure Windows con OpenSSH integrato) e un server raggiungibile via rete. Servono accesso amministrativo (<code>sudo<\/code>) sul server e una sessione SSH gi\u00e0 funzionante, anche solo con password, per la configurazione iniziale.<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><thead><tr><th>Componente<\/th><th>Versione consigliata (2026)<\/th><th>Note<\/th><\/tr><\/thead><tbody><tr><td>OpenSSH<\/td><td>10.3p1 (2 aprile 2026)<\/td><td>Versione stabile corrente lato client e server<\/td><\/tr><tr><td>Ubuntu Server<\/td><td>24.04 LTS o 26.04 LTS<\/td><td>Valido anche su Debian 12\/13<\/td><\/tr><tr><td>ssh-keygen<\/td><td>Incluso in OpenSSH 10.3p1<\/td><td>Genera Ed25519, ECDSA, RSA<\/td><\/tr><tr><td>fail2ban<\/td><td>Pacchetto APT corrente<\/td><td>Mitigazione brute-force<\/td><\/tr><tr><td>Algoritmo chiave<\/td><td>Ed25519<\/td><td>RSA 4096 solo per compatibilit\u00e0 legacy<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Verifica la versione di OpenSSH installata sul client e sul server con un solo comando. Le due macchine non devono per forza avere la stessa versione, ma \u00e8 bene che entrambe siano recenti per supportare gli algoritmi moderni.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>ssh -V\n\n# Output atteso (esempio):\n# OpenSSH_10.3p1, OpenSSL 3.5.0  2 Apr 2026<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Se vedi una versione compresa tra 8.5p1 e 9.7p1, aggiorna subito: quell&#8217;intervallo \u00e8 vulnerabile a CVE-2024-6387 (la falla &#8220;regreSSHion&#8221;), che in determinate condizioni permette l&#8217;esecuzione di codice come root sul server. Su Ubuntu basta <code>sudo apt update &amp;&amp; sudo apt upgrade openssh-server openssh-client<\/code>. Le release 9.9p2 (18 febbraio 2025) e successive correggono anche CVE-2025-26465 e CVE-2025-26466.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"step-2-ed25519-vs-ecdsa-vs-rsa-4096-quale-algoritmo-scegliere\">Step 2: Ed25519 vs ECDSA vs RSA 4096, quale algoritmo scegliere<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">La scelta dell&#8217;algoritmo determina sicurezza, prestazioni e compatibilit\u00e0 della tua chiave per i prossimi anni. Nel 2026 la risposta \u00e8 semplice nella stragrande maggioranza dei casi: <strong>Ed25519<\/strong>. \u00c8 basato sulla curva Curve25519, produce chiavi minuscole (circa 32 byte di materiale grezzo), firma e verifica molto rapidamente e ha parametri sicuri fissati per progetto, quindi non puoi configurarlo male.<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><thead><tr><th>Algoritmo<\/th><th>Sicurezza<\/th><th>Chiave pubblica<\/th><th>Prestazioni<\/th><th>Quando usarlo<\/th><\/tr><\/thead><tbody><tr><td>Ed25519<\/td><td>Eccellente<\/td><td>~32 byte<\/td><td>Molto veloce<\/td><td>Scelta predefinita per ogni nuova chiave<\/td><\/tr><tr><td>ECDSA P-256<\/td><td>Buona<\/td><td>~64 byte<\/td><td>Veloce<\/td><td>Solo se Ed25519 non \u00e8 disponibile<\/td><\/tr><tr><td>ECDSA P-521<\/td><td>Molto buona<\/td><td>Maggiore<\/td><td>Pi\u00f9 lenta di Ed25519<\/td><td>Requisiti di policy specifici<\/td><\/tr><tr><td>RSA 4096<\/td><td>Buona<\/td><td>~512 byte<\/td><td>Pi\u00f9 lenta<\/td><td>Sistemi legacy senza supporto ECC<\/td><\/tr><tr><td>RSA 2048<\/td><td>Sufficiente, sconsigliata<\/td><td>~256 byte<\/td><td>Pi\u00f9 lenta<\/td><td>Da evitare per nuove chiavi<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">RSA 4096 resta una scelta conservativa e compatibile, utile quando devi connetterti ad apparati datati o a sistemi embedded che non parlano curve ellittiche. Lo svantaggio \u00e8 la dimensione (chiavi e firme molto pi\u00f9 grandi) e una verifica pi\u00f9 lenta. ECDSA \u00e8 supportato ma offre pochi vantaggi rispetto a Ed25519, e la generazione di parametri sbagliati \u00e8 storicamente pi\u00f9 rischiosa. La regola operativa: genera una chiave Ed25519 e tieni a portata di mano una RSA 4096 solo se incontri un sistema che la pretende.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"step-3-generare-la-coppia-di-chiavi-con-ssh-keygen\">Step 3: Generare la coppia di chiavi con ssh-keygen<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Sul client (non sul server) genera la chiave. L&#8217;opzione <code>-a 100<\/code> imposta 100 round di derivazione KDF per proteggere meglio la passphrase, <code>-C<\/code> aggiunge un commento identificativo e <code>-f<\/code> definisce il percorso del file.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>ssh-keygen -t ed25519 -a 100 -f ~\/.ssh\/id_ed25519 -C \"laptop-lavoro-2026\"<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Il programma chiede una passphrase. <strong>Non lasciarla vuota<\/strong>: la passphrase cifra la chiave privata sul disco, cos\u00ec chi ruba il portatile non ottiene un accesso immediato ai tuoi server. L&#8217;output assomiglia a questo.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Generating public\/private ed25519 key pair.\nEnter passphrase (empty for no passphrase): ********\nEnter same passphrase again: ********\nYour identification has been saved in \/home\/sam\/.ssh\/id_ed25519\nYour public key has been saved in \/home\/sam\/.ssh\/id_ed25519.pub\nThe key fingerprint is:\nSHA256:9pT2k...Qz8 laptop-lavoro-2026<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Per un sistema legacy che richiede RSA, il comando equivalente \u00e8 il seguente. L&#8217;opzione <code>-o<\/code> forza il formato di chiave privata moderno e <code>-b 4096<\/code> definisce la lunghezza.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>ssh-keygen -t rsa -b 4096 -o -a 100 -f ~\/.ssh\/id_rsa -C \"compatibilita-legacy\"<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Ora hai due file. Visualizza la chiave pubblica, l&#8217;unica che condividerai: inizia con <code>ssh-ed25519<\/code> ed \u00e8 lunga una sola riga. La chiave privata, <code>id_ed25519<\/code> senza estensione, non deve mai uscire dal client n\u00e9 essere inviata via email o chat.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>cat ~\/.ssh\/id_ed25519.pub\n\n# ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIH9...kQ laptop-lavoro-2026<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"step-4-copiare-la-chiave-pubblica-sul-server\">Step 4: Copiare la chiave pubblica sul server<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Il modo pi\u00f9 pulito per autorizzare la chiave sul server \u00e8 <code>ssh-copy-id<\/code>. Lo strumento aggiunge la chiave pubblica al file <code>authorized_keys<\/code> dell&#8217;utente remoto e imposta automaticamente i permessi corretti. Ti verr\u00e0 chiesta un&#8217;ultima volta la password dell&#8217;account: \u00e8 normale, la stai usando per installare la chiave.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>ssh-copy-id -i ~\/.ssh\/id_ed25519.pub sam@server.example.com\n\n# Output atteso:\n# Number of key(s) added: 1\n# Now try logging into the machine, with:\n#   \"ssh 'sam@server.example.com'\"<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"setup-manuale-di-authorized_keys\">Setup manuale di authorized_keys<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Se <code>ssh-copy-id<\/code> non \u00e8 disponibile (per esempio su alcuni client Windows), copia la chiave manualmente. Carica il file pubblico con <code>scp<\/code>, poi accodalo ad <code>authorized_keys<\/code> impostando i permessi nella stessa riga.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>scp ~\/.ssh\/id_ed25519.pub sam@server.example.com:\/tmp\/chiave.pub\n\nssh sam@server.example.com 'mkdir -p ~\/.ssh &amp;&amp; chmod 700 ~\/.ssh &amp;&amp; \\\n  cat \/tmp\/chiave.pub >> ~\/.ssh\/authorized_keys &amp;&amp; \\\n  chmod 600 ~\/.ssh\/authorized_keys &amp;&amp; rm -f \/tmp\/chiave.pub'<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Adesso prova a entrare. Se hai impostato una passphrase, il client la chiede una volta per sbloccare la chiave privata locale, non per autenticarti al server. La connessione deve riuscire senza che il server chieda mai la password dell&#8217;account.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>ssh sam@server.example.com\n\n# Enter passphrase for key '\/home\/sam\/.ssh\/id_ed25519': ********\n# Welcome to Ubuntu 26.04 LTS (GNU\/Linux 6.11.0 x86_64)\n# sam@server:~$<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"step-5-configurare-ssh-agent-e-la-passphrase\">Step 5: Configurare ssh-agent e la passphrase<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Digitare la passphrase a ogni connessione \u00e8 scomodo e spinge verso chiavi senza passphrase, una pessima abitudine. La soluzione \u00e8 <code>ssh-agent<\/code>: un processo che custodisce la chiave decifrata in memoria per la durata della sessione. La sblocchi una volta e l&#8217;agente firma le sfide successive senza richiedere altro.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>eval \"$(ssh-agent -s)\"\nssh-add ~\/.ssh\/id_ed25519\nssh-add -l\n\n# Output:\n# Agent pid 4821\n# Identity added: \/home\/sam\/.ssh\/id_ed25519 (laptop-lavoro-2026)\n# 256 SHA256:9pT2k...Qz8 laptop-lavoro-2026 (ED25519)<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Su GNOME, KDE e macOS l&#8217;agente parte in automatico al login, quindi spesso basta <code>ssh-add<\/code>. Su macOS puoi memorizzare la passphrase nel portachiavi con <code>ssh-add --apple-use-keychain ~\/.ssh\/id_ed25519<\/code>. Evita invece di inoltrare l&#8217;agente (<code>ForwardAgent yes<\/code>) verso server non fidati: chi controlla quel server pu\u00f2 usare la tua chiave per la durata della connessione.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"step-6-semplificare-le-connessioni-con-ssh-config\">Step 6: Semplificare le connessioni con ~\/.ssh\/config<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Il file <code>~\/.ssh\/config<\/code> sul client trasforma comandi lunghi in alias brevi e centralizza le impostazioni per host. Crea o modifica il file e definisci una voce per il tuo server. La direttiva <code>IdentitiesOnly yes<\/code> evita che il client proponga al server tutte le chiavi in elenco, comportamento che pu\u00f2 causare l&#8217;errore &#8220;Too many authentication failures&#8221;.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Host server-prod\n    HostName server.example.com\n    User sam\n    Port 2222\n    IdentityFile ~\/.ssh\/id_ed25519\n    IdentitiesOnly yes\n    ServerAliveInterval 30\n    ServerAliveCountMax 3<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Imposta i permessi del file di configurazione e connettiti con l&#8217;alias. Da ora <code>ssh server-prod<\/code> equivale a digitare host, utente, porta e chiave per esteso.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>chmod 600 ~\/.ssh\/config\nssh server-prod<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Le direttive <code>ServerAliveInterval<\/code> e <code>ServerAliveCountMax<\/code> inviano un pacchetto di keep-alive ogni 30 secondi e chiudono la sessione dopo tre mancate risposte, evitando connessioni &#8220;appese&#8221; dietro router che terminano le sessioni inattive.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"step-7-hardening-di-sshd_config-sul-server\">Step 7: Hardening di sshd_config sul server<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Ora blindiamo il demone SSH. Sul server modifica <code>\/etc\/ssh\/sshd_config<\/code> con un editor. <strong>Non chiudere la sessione corrente<\/strong>: aprine una seconda per testare le modifiche, cos\u00ec se ti blocchi fuori hai ancora un terminale attivo per correggere.<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><thead><tr><th>Direttiva<\/th><th>Valore consigliato<\/th><th>Effetto<\/th><\/tr><\/thead><tbody><tr><td>PubkeyAuthentication<\/td><td>yes<\/td><td>Abilita l&#8217;autenticazione a chiave pubblica<\/td><\/tr><tr><td>PasswordAuthentication<\/td><td>no<\/td><td>Disabilita del tutto le password<\/td><\/tr><tr><td>KbdInteractiveAuthentication<\/td><td>no<\/td><td>Blocca i prompt interattivi via PAM<\/td><\/tr><tr><td>PermitRootLogin<\/td><td>no<\/td><td>Vieta il login diretto come root<\/td><\/tr><tr><td>MaxAuthTries<\/td><td>3<\/td><td>Limita i tentativi per connessione<\/td><\/tr><tr><td>AllowUsers<\/td><td>sam admin<\/td><td>Consente SSH solo agli account elencati<\/td><\/tr><tr><td>Port<\/td><td>2222<\/td><td>Riduce il rumore degli scanner automatici<\/td><\/tr><tr><td>X11Forwarding<\/td><td>no<\/td><td>Disabilita l&#8217;inoltro grafico non necessario<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Applica una baseline come la seguente. Su Ubuntu recenti le impostazioni vanno preferibilmente in un file dedicato dentro <code>\/etc\/ssh\/sshd_config.d\/<\/code>, che ha la precedenza sul file principale.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo tee \/etc\/ssh\/sshd_config.d\/99-hardening.conf >\/dev\/null &lt;&lt;'EOF'\nPort 2222\nPubkeyAuthentication yes\nPasswordAuthentication no\nKbdInteractiveAuthentication no\nPermitRootLogin no\nMaxAuthTries 3\nAllowUsers sam admin\nX11Forwarding no\nEOF<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Verifica sempre la sintassi prima di riavviare. Il comando <code>sshd -t<\/code> non produce output se la configurazione \u00e8 valida, mentre segnala riga e motivo di un eventuale errore.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo sshd -t &amp;&amp; echo \"Configurazione valida\"\nsudo systemctl restart ssh<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"step-8-disabilitare-password-e-accesso-root-in-sicurezza\">Step 8: Disabilitare password e accesso root in sicurezza<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Disattivare le password \u00e8 il momento pi\u00f9 delicato del tutorial. Se la tua chiave non \u00e8 installata correttamente e disabiliti le password, ti chiudi fuori. La procedura sicura \u00e8 questa: con la baseline dello step precedente gi\u00e0 applicata, <strong>non chiudere la sessione root o sudo attiva<\/strong> e apri un secondo terminale per testare l&#8217;accesso a chiave sulla nuova porta.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># Dal client, in una NUOVA finestra di terminale:\nssh -p 2222 sam@server.example.com\n\n# Se entri senza che venga chiesta la password dell'account,\n# la chiave funziona e puoi considerare l'hardening riuscito.<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Solo dopo aver confermato che il login a chiave funziona nella seconda sessione, puoi chiudere la prima. Se invece ricevi <code>Permission denied (publickey)<\/code>, non disconnetterti: torna alla sessione ancora aperta, controlla <code>authorized_keys<\/code> e i permessi, e correggi prima di proseguire. Molti provider cloud offrono una console seriale o una modalit\u00e0 di recovery che ti salva anche in caso di lockout totale.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Per i firewall ricorda di aprire la nuova porta. Se usi UFW su Ubuntu, autorizza la 2222 e rimuovi la 22 solo dopo aver verificato l&#8217;accesso. Questo approccio per chiavi e accessi limitati si integra con altre difese perimetrali come il <a href=\"\/it\/configurare-server-wireguard-vpn\/\">server WireGuard VPN<\/a>, che pu\u00f2 esporre SSH solo all&#8217;interno di un tunnel cifrato.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo ufw allow 2222\/tcp\nsudo ufw reload\n# Dopo aver verificato il login sulla 2222:\n# sudo ufw delete allow 22\/tcp<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"step-9-algoritmi-moderni-e-crittografia-post-quantistica\">Step 9: Algoritmi moderni e crittografia post-quantistica<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">OpenSSH 10.3p1 negozia di default algoritmi solidi, quindi nella maggior parte dei casi non serve fissarli a mano. Anzi, &#8220;incollare&#8221; liste statiche di <code>KexAlgorithms<\/code> o <code>Ciphers<\/code> \u00e8 rischioso: i default evolvono a ogni release e una lista obsoleta pu\u00f2 indebolire il server o impedirne l&#8217;avvio dopo un aggiornamento. La regola del 2026 \u00e8 lasciare i default e intervenire solo per allinearsi a una baseline auditata.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">La novit\u00e0 pi\u00f9 rilevante \u00e8 lo scambio di chiavi resistente al quantum. Le versioni recenti di OpenSSH adottano scambi ibridi come <code>mlkem768x25519-sha256<\/code> (basato su ML-KEM, lo standard NIST derivato da Kyber) e <code>sntrup761x25519-sha256<\/code>. Sono &#8220;ibridi&#8221; perch\u00e9 combinano un algoritmo post-quantistico con la classica Curve25519: anche se uno dei due cadesse, l&#8217;altro tiene. Questo protegge dal modello &#8220;harvest now, decrypt later&#8221;, in cui un attaccante registra il traffico oggi per decifrarlo quando avr\u00e0 un computer quantistico.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Se devi davvero pinnare gli algoritmi per una policy interna, mantieni la lista minima e moderna, per esempio cifrari AEAD come <code>chacha20-poly1305@openssh.com<\/code> e <code>aes256-gcm@openssh.com<\/code>. Per capire perch\u00e9 il post-quantum sta entrando ovunque, dalla web alla messaggistica, abbiamo dedicato un&#8217;analisi alla <a href=\"\/it\/cryptography-hub\/\">crittografia e alle funzioni hash<\/a> che alimentano queste primitive.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># Verifica gli algoritmi di scambio chiavi supportati dal tuo client:\nssh -Q kex | grep -E 'mlkem|sntrup'\n\n# Output atteso su OpenSSH 10.3p1:\n# sntrup761x25519-sha512@openssh.com\n# mlkem768x25519-sha256<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"step-10-proteggere-ssh-con-fail2ban\">Step 10: Proteggere SSH con fail2ban<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Con le password disabilitate i bot non possono indovinare credenziali, ma continuano a tempestare il server di tentativi che sporcano i log e consumano risorse. fail2ban analizza <code>\/var\/log\/auth.log<\/code>, individua gli indirizzi IP che falliscono ripetutamente e li banna a livello di firewall per un periodo definito.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo apt update\nsudo apt install fail2ban\n\nsudo tee \/etc\/fail2ban\/jail.d\/sshd.local >\/dev\/null &lt;&lt;'EOF'\n[sshd]\nenabled = true\nport = 2222\nfilter = sshd\nlogpath = \/var\/log\/auth.log\nmaxretry = 5\nfindtime = 10m\nbantime = 1h\nEOF\n\nsudo systemctl restart fail2ban\nsudo systemctl enable fail2ban<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Se hai mantenuto SSH sulla porta 22 imposta <code>port = 22<\/code>. Controlla lo stato del jail: vedrai il conteggio dei tentativi falliti e l&#8217;elenco degli IP attualmente bannati. Con <code>bantime = 1h<\/code> ogni IP viene escluso per un&#8217;ora dopo cinque fallimenti in dieci minuti.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo fail2ban-client status sshd\n\n# Status for the jail: sshd\n# |- Filter\n# |  |- Currently failed: 2\n# |  |- Total failed:     148\n# |  `- File list:        \/var\/log\/auth.log\n# `- Actions\n#    |- Currently banned: 3\n#    `- Total banned:     27<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"step-11-impostare-i-permessi-corretti-dei-file\">Step 11: Impostare i permessi corretti dei file<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">OpenSSH rifiuta di usare chiavi e file di configurazione con permessi troppo aperti: \u00e8 una protezione contro la lettura da parte di altri utenti del sistema. La causa numero uno dei messaggi &#8220;bad permissions&#8221; e di molti <code>Permission denied (publickey)<\/code> sono proprio permessi sbagliati su <code>~\/.ssh<\/code>. Applica questo schema sia sul client sia sul server.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>chmod 700 ~\/.ssh\nchmod 600 ~\/.ssh\/authorized_keys\nchmod 600 ~\/.ssh\/id_ed25519\nchmod 644 ~\/.ssh\/id_ed25519.pub\nchown -R \"$USER:$USER\" ~\/.ssh<\/code><\/pre>\n\n\n\n<figure class=\"wp-block-table\"><table><thead><tr><th>File o directory<\/th><th>Permessi<\/th><th>Significato<\/th><\/tr><\/thead><tbody><tr><td>~\/.ssh<\/td><td>700<\/td><td>Accesso solo al proprietario<\/td><\/tr><tr><td>~\/.ssh\/authorized_keys<\/td><td>600<\/td><td>Lettura e scrittura solo proprietario<\/td><\/tr><tr><td>~\/.ssh\/id_ed25519 (privata)<\/td><td>600<\/td><td>Mai leggibile da altri<\/td><\/tr><tr><td>~\/.ssh\/id_ed25519.pub (pubblica)<\/td><td>644<\/td><td>Leggibile e condivisibile<\/td><\/tr><tr><td>~\/.ssh\/config<\/td><td>600<\/td><td>Lettura e scrittura solo proprietario<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">La propriet\u00e0 conta quanto i permessi: tutti i file in <code>~\/.ssh<\/code> devono appartenere all&#8217;utente, non a root. Se hai creato file con <code>sudo<\/code> per errore, il comando <code>chown<\/code> qui sopra rimette a posto il proprietario in modo ricorsivo.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"step-12-il-progetto-completo-e-la-checklist-di-verifica\">Step 12: Il progetto completo e la checklist di verifica<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">A questo punto hai un sistema completo e funzionante: client con chiave Ed25519 protetta da passphrase e gestita da <code>ssh-agent<\/code>, server che accetta solo autenticazione a chiave su una porta non standard, root disabilitato e fail2ban a presidio del brute-force. Esegui questa verifica finale per confermare che ogni pezzo sia al suo posto.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># 1. Le password sono davvero disattivate? (deve fallire subito)\nssh -p 2222 -o PreferredAuthentications=password \\\n    -o PubkeyAuthentication=no sam@server.example.com\n# Atteso: Permission denied (publickey).\n\n# 2. Il login a chiave funziona?\nssh server-prod 'echo OK; hostname; whoami'\n# Atteso: OK \/ nome-server \/ sam\n\n# 3. fail2ban \u00e8 attivo?\nsudo fail2ban-client status sshd<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Usa questa checklist come riepilogo del progetto. Se tutte le voci sono soddisfatte, il tuo accesso SSH \u00e8 blindato secondo le pratiche del 2026.<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>Chiave Ed25519 generata con <code>ssh-keygen -a 100<\/code> e passphrase impostata<\/li><li>Chiave pubblica in <code>authorized_keys<\/code>, chiave privata mai uscita dal client<\/li><li><code>PasswordAuthentication no<\/code> e <code>PermitRootLogin no<\/code> attivi e testati<\/li><li><code>MaxAuthTries 3<\/code> e <code>AllowUsers<\/code> configurati<\/li><li>Porta personalizzata aperta sul firewall, porta 22 chiusa dopo verifica<\/li><li>Permessi 700\/600 corretti su client e server<\/li><li>fail2ban installato, abilitato e con il jail sshd attivo<\/li><li>OpenSSH aggiornato a una versione non vulnerabile a CVE-2024-6387<\/li><\/ul>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"errori-comuni-e-troubleshooting\">Errori comuni e troubleshooting<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Anche con una procedura precisa, l&#8217;autenticazione a chiave fallisce per pochi motivi ricorrenti. Ecco gli otto problemi pi\u00f9 frequenti e come risolverli rapidamente. Quasi tutti si diagnosticano con la modalit\u00e0 verbosa <code>ssh -v<\/code>, che mostra esattamente quali chiavi vengono proposte e dove si interrompe il dialogo.<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li><strong>Permission denied (publickey)<\/strong>: la chiave non \u00e8 in <code>authorized_keys<\/code>, l&#8217;utente \u00e8 sbagliato o i permessi sono troppo aperti. Esegui <code>ssh -v sam@host<\/code> e controlla quale chiave offre il client.<\/li><li><strong>Bad permissions \/ ignoring key<\/strong>: <code>~\/.ssh<\/code> o la chiave privata hanno permessi errati. Applica <code>chmod 700 ~\/.ssh<\/code> e <code>chmod 600 ~\/.ssh\/id_ed25519<\/code>.<\/li><li><strong>Host key verification failed<\/strong>: la chiave host del server \u00e8 cambiata (reinstallazione o reimaging) e <code>known_hosts<\/code> contiene quella vecchia. Rimuovi la voce con <code>ssh-keygen -R server.example.com<\/code> e riconnetti verificando il fingerprint.<\/li><li><strong>Too many authentication failures<\/strong>: il client offre troppe chiavi e supera <code>MaxAuthTries<\/code>. Aggiungi <code>IdentitiesOnly yes<\/code> nel file <code>~\/.ssh\/config<\/code>.<\/li><li><strong>Agent admitted failure to sign<\/strong>: la chiave non \u00e8 caricata nell&#8217;agente. Esegui <code>ssh-add ~\/.ssh\/id_ed25519<\/code> e verifica con <code>ssh-add -l<\/code>.<\/li><li><strong>Connection refused sulla nuova porta<\/strong>: il firewall blocca la 2222 o <code>sshd<\/code> non \u00e8 ripartito. Controlla con <code>sudo ufw status<\/code> e <code>sudo systemctl status ssh<\/code>.<\/li><li><strong>sshd non riparte dopo le modifiche<\/strong>: errore di sintassi in <code>sshd_config<\/code>. Lancia sempre <code>sudo sshd -t<\/code> prima del riavvio per individuare la riga incriminata.<\/li><li><strong>Lockout totale<\/strong>: hai disabilitato le password senza una chiave funzionante. Accedi tramite la console seriale o la modalit\u00e0 rescue del provider cloud, riabilita temporaneamente <code>PasswordAuthentication yes<\/code> e ricomincia dallo step 4.<\/li><\/ul>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"diagnostica-avanzata-lato-server\">Diagnostica avanzata lato server<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Quando il client non basta, leggi i log del server. Su Ubuntu i tentativi SSH finiscono in <code>\/var\/log\/auth.log<\/code>, mentre <code>journalctl<\/code> mostra in tempo reale il comportamento del demone. Spesso il motivo esatto del rifiuto (chiave non autorizzata, utente non in <code>AllowUsers<\/code>, permessi errati) \u00e8 scritto chiaramente l\u00ec.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo journalctl -u ssh -f\nsudo tail -n 50 \/var\/log\/auth.log | grep sshd<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"consigli-avanzati-per-ambienti-di-produzione\">Consigli avanzati per ambienti di produzione<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Una volta padroneggiate le basi, alcune pratiche fanno la differenza su flotte di server. La prima \u00e8 la <strong>chiave su token hardware<\/strong>: generando una chiave di tipo <code>ed25519-sk<\/code> la parte privata vive in una chiavetta FIDO2 (come una YubiKey) e ogni firma richiede un tocco fisico. Senza il token la chiave \u00e8 inutilizzabile, anche se il portatile viene compromesso.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>ssh-keygen -t ed25519-sk -O resident -f ~\/.ssh\/id_ed25519_sk -C \"yubikey-prod\"<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Per parchi macchine numerosi, le <strong>certificate authority SSH<\/strong> superano la gestione manuale di <code>authorized_keys<\/code>. Firmi le chiavi degli utenti con una CA interna e ogni server si fida automaticamente di chiunque presenti un certificato valido e non scaduto, eliminando la distribuzione delle chiavi pubbliche server per server. Aggiungi <code>ClientAliveInterval 300<\/code> e <code>ClientAliveCountMax 2<\/code> in <code>sshd_config<\/code> per chiudere le sessioni inattive, e considera <code>LoginGraceTime 20<\/code> per ridurre la finestra utile agli attacchi pre-autenticazione come regreSSHion.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Infine, automatizza l&#8217;audit. Strumenti come <code>ssh-audit<\/code> analizzano la configurazione del tuo server e segnalano algoritmi deboli o impostazioni obsolete con un punteggio. Integrato in una pipeline, ti avvisa quando un aggiornamento cambia i default o quando una macchina si discosta dalla baseline. Per il quadro normativo europeo che spinge verso questi controlli, vedi la nostra analisi della <a href=\"\/it\/nis2-italia-direttiva-2026\/\">direttiva NIS2 in Italia<\/a>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"backup-rotazione-e-revoca-delle-chiavi-ssh\">Backup, rotazione e revoca delle chiavi SSH<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Una chiave SSH non \u00e8 eterna. La gestione del ciclo di vita (backup sicuro, rotazione periodica, revoca tempestiva) \u00e8 ci\u00f2 che distingue una configurazione amatoriale da una di produzione. Il principio guida \u00e8 semplice: la chiave privata va trattata come la combinazione di una cassaforte, mentre la chiave pubblica \u00e8 un&#8217;informazione liberamente distribuibile.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Per il backup, non copiare mai la chiave privata su un servizio cloud non cifrato o in una chat. Conservala in un password manager che supporti gli allegati cifrati, oppure su un supporto offline custodito fisicamente. Se la chiave \u00e8 protetta da una passphrase robusta, anche un backup che finisse in mani sbagliate resterebbe inutilizzabile senza la frase. Esporta sempre anche la chiave pubblica corrispondente, cos\u00ec puoi ripristinare l&#8217;accesso senza rigenerare tutto.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">La rotazione consiste nel generare periodicamente una nuova coppia e dismettere la vecchia. Una cadenza ragionevole per ambienti sensibili \u00e8 annuale, oppure immediata in caso di sospetto compromesso. La procedura corretta evita finestre di lockout: prima aggiungi la nuova chiave pubblica ad <code>authorized_keys<\/code>, verifichi che il login con la nuova chiave funzioni, e solo dopo rimuovi la riga della vecchia chiave.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># 1. Genera la nuova chiave sul client\nssh-keygen -t ed25519 -a 100 -f ~\/.ssh\/id_ed25519_new -C \"rotazione-2026\"\n\n# 2. Installa la nuova chiave pubblica (la vecchia \u00e8 ancora attiva)\nssh-copy-id -i ~\/.ssh\/id_ed25519_new.pub server-prod\n\n# 3. Verifica il login con la nuova chiave\nssh -i ~\/.ssh\/id_ed25519_new server-prod 'echo nuova chiave OK'\n\n# 4. Solo ora rimuovi la vecchia riga da authorized_keys sul server\nssh server-prod \"sed -i '\/laptop-lavoro-2026\/d' ~\/.ssh\/authorized_keys\"<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">La revoca \u00e8 la rimozione immediata di una chiave compromessa. Su un singolo server basta cancellare la riga corrispondente in <code>authorized_keys<\/code>. Su una flotta gestita con certificate authority, invece, pubblichi la chiave in una lista di revoca (<code>RevokedKeys<\/code> in <code>sshd_config<\/code>) e tutti i server la rifiutano all&#8217;istante, senza dover toccare ogni macchina. \u00c8 uno dei vantaggi principali dell&#8217;approccio basato su CA per organizzazioni con molti host.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"accesso-ssh-da-windows-con-openssh-integrato\">Accesso SSH da Windows con OpenSSH integrato<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Windows include OpenSSH come funzionalit\u00e0 nativa da diversi anni, quindi non servono pi\u00f9 client di terze parti per le operazioni di base. Apri PowerShell e verifica la presenza del client: i comandi <code>ssh<\/code>, <code>ssh-keygen<\/code> e <code>ssh-add<\/code> funzionano esattamente come su Linux e macOS, con qualche differenza nei percorsi dei file.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># In PowerShell:\nssh -V\nssh-keygen -t ed25519 -a 100 -C \"windows-desktop\"\n# Le chiavi finiscono in C:\\Users\\&lt;utente&gt;\\.ssh\\<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Su Windows l&#8217;agente \u00e8 un servizio di sistema. Abilitalo e avvialo una sola volta da PowerShell con privilegi di amministratore, poi aggiungi la chiave. Da quel momento l&#8217;agente parte automaticamente a ogni avvio e custodisce la chiave decifrata.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># PowerShell come amministratore:\nSet-Service -Name ssh-agent -StartupType Automatic\nStart-Service ssh-agent\nssh-add $env:USERPROFILE\\.ssh\\id_ed25519<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Il file di configurazione vive in <code>C:\\Users\\&lt;utente&gt;\\.ssh\\config<\/code> e usa la stessa sintassi vista nello step 6. L&#8217;unico accorgimento ricorrente riguarda i permessi: se Windows segnala che la chiave privata \u00e8 &#8220;troppo aperta&#8221;, rimuovi l&#8217;ereditariet\u00e0 delle ACL e lascia l&#8217;accesso al solo utente proprietario tramite le propriet\u00e0 del file o il comando <code>icacls<\/code>. Per chi preferisce un ambiente Linux completo, WSL2 offre un OpenSSH identico a quello di Ubuntu, con i file in <code>~\/.ssh<\/code> come di consueto.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"domande-frequenti-sullautenticazione-ssh-con-chiavi\">Domande frequenti sull&#8217;autenticazione SSH con chiavi<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"devo-impostare-una-passphrase-sulla-chiave-ssh\">Devo impostare una passphrase sulla chiave SSH?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">S\u00ec. La passphrase cifra la chiave privata sul disco: senza di essa chiunque acceda al tuo file ottiene un accesso immediato a tutti i server autorizzati. Con <code>ssh-agent<\/code> la digiti una sola volta per sessione, quindi non c&#8217;\u00e8 ragione pratica per ometterla. L&#8217;unica eccezione legittima sono le chiavi usate da processi automatici, che vanno comunque limitate con restrizioni in <code>authorized_keys<\/code>.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"ed25519-o-rsa-4096-nel-2026\">Ed25519 o RSA 4096 nel 2026?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Ed25519 per ogni nuova chiave. \u00c8 pi\u00f9 sicuro per dimensione, molto pi\u00f9 veloce e immune a errori di configurazione. RSA 4096 ha senso solo quando devi connetterti a sistemi datati o apparati embedded che non supportano le curve ellittiche. In quel caso genera una seconda chiave RSA dedicata e usala unicamente per quegli host.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"cambiare-la-porta-ssh-dalla-22-rende-il-server-piu-sicuro\">Cambiare la porta SSH dalla 22 rende il server pi\u00f9 sicuro?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Solo marginalmente. Spostarsi sulla 2222 riduce il rumore degli scanner automatici e alleggerisce i log, ma non \u00e8 una difesa crittografica: un attaccante mirato trova facilmente la porta giusta. Consideralo igiene, non sicurezza. La vera protezione \u00e8 <code>PasswordAuthentication no<\/code> insieme alle chiavi.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"cosa-succede-se-perdo-la-chiave-privata\">Cosa succede se perdo la chiave privata?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Perdi l&#8217;accesso ai server che la autorizzano, ma nessun altro pu\u00f2 usarla se era protetta da passphrase. La procedura \u00e8 generare una nuova chiave, aggiungerne la pubblica ad <code>authorized_keys<\/code> tramite un canale alternativo (console del provider, un altro account autorizzato) e rimuovere la vecchia chiave dal file. Per questo conviene autorizzare sempre almeno due chiavi o mantenere un percorso di recovery.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"fail2ban-serve-ancora-se-ho-disabilitato-le-password\">fail2ban serve ancora se ho disabilitato le password?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">S\u00ec, anche se il rischio di compromissione crolla. fail2ban non protegge tanto dalle password (gi\u00e0 disattivate) quanto dal rumore: banna gli IP che martellano la porta, riduce il carico, mantiene i log leggibili e mitiga eventuali falle pre-autenticazione future. \u00c8 un complemento economico, non un&#8217;alternativa alle chiavi.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"ssh-e-gia-pronto-per-i-computer-quantistici\">SSH \u00e8 gi\u00e0 pronto per i computer quantistici?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Lo scambio di chiavi s\u00ec, l&#8217;autenticazione non ancora del tutto. OpenSSH negozia scambi ibridi post-quantistici come <code>mlkem768x25519-sha256<\/code>, che proteggono la riservatezza della sessione dal modello &#8220;registra ora, decifra dopo&#8221;. Le firme di autenticazione restano per ora basate su Ed25519 o RSA, sicure contro i computer classici. La migrazione completa delle firme verso algoritmi post-quantistici \u00e8 in corso a livello di standard.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"posso-usare-la-stessa-chiave-su-piu-computer\">Posso usare la stessa chiave su pi\u00f9 computer?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">\u00c8 tecnicamente possibile ma sconsigliato. La buona pratica \u00e8 una chiave per dispositivo: se un laptop viene rubato o dismesso, revochi solo quella chiave senza toccare le altre. Copiare la chiave privata su pi\u00f9 macchine moltiplica i punti di esposizione e complica la revoca selettiva.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"qual-e-la-versione-di-openssh-da-evitare-per-la-vulnerabilita-regresshion\">Qual \u00e8 la versione di OpenSSH da evitare per la vulnerabilit\u00e0 regreSSHion?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Le versioni portable da 8.5p1 a 9.7p1 sono vulnerabili a CVE-2024-6387, che pu\u00f2 portare all&#8217;esecuzione di codice come root. Aggiorna ad almeno 9.9p2 (febbraio 2025) o, meglio, alla 10.3p1 (aprile 2026). Verifica con <code>ssh -V<\/code> e, sul server, mantieni attivi gli aggiornamenti di sicurezza automatici.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"related-coverage\">Related Coverage<\/h3>\n\n\n\n<ul class=\"wp-block-list\"><li><a href=\"\/it\/configurare-server-wireguard-vpn\/\">Server WireGuard VPN su Ubuntu: 12 Step [2026]<\/a><\/li><li><a href=\"\/it\/openssl-certificati-chiavi\/\">OpenSSL 3.5 LTS: Chiavi e Certificati in 12 Step [2026]<\/a><\/li><li><a href=\"\/it\/certbot-lets-encrypt-https\/\">Let&#8217;s Encrypt e Certbot: HTTPS Gratis in 10 Step [2026]<\/a><\/li><li><a href=\"\/it\/gpg-cifrare-firmare-file\/\">GPG: Cifrare e Firmare File in 12 Step [2026]<\/a><\/li><li><a href=\"\/it\/https-e-tls\/\">HTTPS e TLS: come viene protetta una connessione web<\/a><\/li><li><a href=\"\/it\/cryptography-hub\/\">Crittografia: funzioni hash, SHA e fiducia digitale<\/a><\/li><\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Fonti ufficiali e approfondimenti tecnici: <a href=\"https:\/\/www.openssh.com\/\" target=\"_blank\" rel=\"noopener\">progetto OpenSSH<\/a>, <a href=\"https:\/\/www.gpg4win.org\/\" target=\"_blank\" rel=\"noopener\">documentazione Gpg4win<\/a> per i client Windows, le <a href=\"https:\/\/datatracker.ietf.org\/doc\/rfc9580\/\" target=\"_blank\" rel=\"noopener\">specifiche IETF RFC 9580<\/a> sull&#8217;evoluzione di OpenPGP e le <a href=\"https:\/\/riseup.net\/en\/security\/message-security\/openpgp\/best-practices\" target=\"_blank\" rel=\"noopener\">best practice di Riseup<\/a> sulla gestione delle chiavi.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Le password SSH sono il bersaglio numero uno dei bot che scansionano internet. Un server Ubuntu appena esposto sulla porta 22 riceve migliaia di tentativi di login al giorno, spesso\u2026<\/p>\n","protected":false},"author":9,"featured_media":131,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[3],"tags":[],"class_list":["post-130","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-security"],"_links":{"self":[{"href":"https:\/\/shattered.io\/it\/wp-json\/wp\/v2\/posts\/130","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/shattered.io\/it\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/shattered.io\/it\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/shattered.io\/it\/wp-json\/wp\/v2\/users\/9"}],"replies":[{"embeddable":true,"href":"https:\/\/shattered.io\/it\/wp-json\/wp\/v2\/comments?post=130"}],"version-history":[{"count":1,"href":"https:\/\/shattered.io\/it\/wp-json\/wp\/v2\/posts\/130\/revisions"}],"predecessor-version":[{"id":132,"href":"https:\/\/shattered.io\/it\/wp-json\/wp\/v2\/posts\/130\/revisions\/132"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/shattered.io\/it\/wp-json\/wp\/v2\/media\/131"}],"wp:attachment":[{"href":"https:\/\/shattered.io\/it\/wp-json\/wp\/v2\/media?parent=130"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/shattered.io\/it\/wp-json\/wp\/v2\/categories?post=130"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/shattered.io\/it\/wp-json\/wp\/v2\/tags?post=130"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}