Notizie e guide
Come Usare SSH: Connettiti a Server Remoti in 5 Passi Facili
SSH (Secure Shell) è il protocollo cifrato con cui apri una sessione su un server remoto. Ti colleghi con il comando ssh utente@indirizzo, di solito sulla porta 22 TCP. Con una chiave Ed25519 ti autentichi senza password; dopo aver impostato PasswordAuthentication no, il server non accetta più tentativi sulle password.
Rackone · 11 min di lettura · Aggiornato il
In questo articolo
Cos'è SSH e a cosa serve?
SSH, cioè Secure Shell, è un protocollo di rete che apre una sessione cifrata su un computer remoto. Dalla sessione esegui comandi da terminale, trasferisci file e inoltri porte attraverso un tunnel (port forwarding).
Il modello è client e server. Sul tuo computer è in esecuzione il client ssh, sul server il demone sshd, in ascolto di default sulla porta 22 TCP, come riporta la pagina sshd_config(5) («The default is 22»). Il server remoto può essere anche una VPS.
L'implementazione più diffusa è OpenSSH, del progetto OpenBSD. Al 27 ottobre 2026 l'ultima versione è OpenSSH 10.6, uscita il 6 ottobre 2026 (release notes). La trovi su Linux e su Windows.
Per autenticarti puoi usare una password oppure una coppia di chiavi. Con la chiave ti autentichi senza password, e dopo aver disattivato l'accesso con password il server non accetta più tentativi sulle password: per questo conviene.
Come funziona il protocollo SSH?
Il client apre una connessione TCP al server, poi client e server concordano gli algoritmi, il client verifica l'identità del server e infine ti autentichi. Nel dettaglio:
- Il client apre la connessione TCP verso il server, di solito sulla porta 22.
- Client e server concordano versione e algoritmi.
- Lo scambio di chiavi crea la chiave di sessione. Da OpenSSH 10.0 l'algoritmo predefinito è l'ibrido post-quantistico mlkem768x25519-sha256; le distribuzioni con versioni più vecchie ne usano altri.
- Il server si identifica con la sua chiave host. Alla prima connessione il client ti mostra l'impronta della chiave host e, se la confermi, salva la chiave host in
~/.ssh/known_hosts(ssh(1)). - Tu ti autentichi, con la chiave o con la password.
- Da qui ogni dato viaggia cifrato e con controllo d'integrità.
Come ti colleghi a un server remoto?
Per collegarti usi il comando ssh, indicando l'account sul server e il suo indirizzo:
ssh utente@indirizzo
utente è l'account sul server, indirizzo un IP o un nome di dominio. Due esempi:
ssh admin@server.example.com
ssh -p 2222 utente@server.example.com
Il secondo usa una porta diversa dalla 22, indicata con -p.
Alla prima connessione il client mostra l'impronta della chiave host e chiede conferma. Prima di rispondere «yes», confronta l'impronta con quella che ti dà chi gestisce il server. Per leggere la versione del client usa l'opzione -V, che stampa il numero di versione ed esce.
Da Windows il client è lo stesso: ssh fa parte di OpenSSH per Windows.
Quale porta usa SSH e come si cambia?
La porta predefinita è la 22 TCP. Cambiarla riduce il rumore delle scansioni automatiche sulla 22, ma Red Hat scrive che cambiare la porta dà solo benefici di sicurezza limitati. Conta di più usare le chiavi e disattivare la password.
Prima di toccare la porta, apri quella nuova nel firewall e riavvia solo dopo. Tieni aperta la sessione in corso finché una sessione nuova sulla porta nuova non funziona.
La modifica è una riga, Port 2222 (il numero è un esempio), in /etc/ssh/sshd_config o in un file di /etc/ssh/sshd_config.d/. Poi sudo sshd -t controlla la sintassi. Il riavvio cambia secondo la distribuzione:
| Distribuzione | Dopo la modifica | Nota |
|---|---|---|
| Ubuntu 24.04 LTS | sudo systemctl daemon-reload, poi sudo systemctl restart ssh.socket | Socket di systemd: la porta si rilegge solo con daemon-reload |
| Debian | sudo systemctl restart ssh | Il servizio si chiama ssh |
| Rocky Linux (procedura della guida di Red Hat) | tre comandi sulla porta e sul firewall, poi il riavvio (blocco sotto) | SELinux consente a sshd di ascoltare solo sulle porte di tipo ssh_port_t |
Da Ubuntu 22.10 systemd avvia sshd tramite socket activation e dalla 24.04 ricava la porta da sshd_config: senza daemon-reload la porta non cambia, come spiega il Discourse di Ubuntu e conferma un bug di Ubuntu, il 2069041.
Su Rocky Linux i comandi sono questi:
sudo semanage port -a -t ssh_port_t -p tcp 2222
sudo firewall-cmd --permanent --add-port=2222/tcp
sudo firewall-cmd --reload
sudo systemctl restart sshd
semanage sta nel pacchetto policycoreutils-python-utils. Collegati poi indicando la porta con -p, oppure scrivi Port 2222 nel file ~/.ssh/config:
ssh -p 2222 utente@indirizzo
Come si configura l'accesso con le chiavi?
Per autenticarti puoi usare una coppia di chiavi: la privata resta sul tuo computer, la pubblica va sul server. Su una VPS Linux di Rackone le chiavi si caricano già alla creazione della macchina. Altrove segui questi passi:
Genera la coppia sul tuo computer, non sul server:
ssh-keygen -t ed25519 -C "nome@azienda"Da OpenSSH 9.5 (4 ottobre 2023) Ed25519 è il tipo predefinito di ssh-keygen;
-t ed25519lo rende esplicito anche sulle versioni più vecchie. Nascono~/.ssh/id_ed25519(privata) e~/.ssh/id_ed25519.pub(pubblica), e la passphrase cifra la chiave privata sul disco: impostala. RSA serve solo per un server che non accetta Ed25519, e OpenSSH non supporta più DSA dalla versione 10.0.Copia la chiave pubblica sul server:
ssh-copy-id -i ~/.ssh/id_ed25519.pub utente@indirizzoIn alternativa aggiungila a mano in
~/.ssh/authorized_keysdel server. La cartella~/.sshdeve essere accessibile solo al proprietario (700) eauthorized_keysleggibile e scrivibile solo da lui (600). sshd ignoraauthorized_keysse altri utenti possono scriverci (sshd(8), StrictModes).Prova la connessione: non deve più chiederti la password dell'utente, solo la passphrase.
Carica la chiave nell'agente, così scrivi la passphrase una volta per sessione:
ssh-add ~/.ssh/id_ed25519
Come si disattiva l'accesso con password?
Per disattivare la password imposti tre opzioni in sshd. Prima di cominciare, verifica di poter eseguire i comandi con sudo e che l'accesso con chiave funzioni.
Le opzioni sono queste:
PasswordAuthentication no
KbdInteractiveAuthentication no
PermitRootLogin no
ChallengeResponseAuthentication è un alias deprecato di KbdInteractiveAuthentication (sshd_config(5)). PermitRootLogin vale di default prohibit-password: root entra solo con chiave. Con no non entra affatto, e lavori con un utente normale e sudo.
Per ogni opzione sshd usa il primo valore che legge. Su Ubuntu sshd_config include in testa i file di /etc/ssh/sshd_config.d/*.conf, che quindi prevalgono sul file principale, come indica la documentazione di Ubuntu Server: se uno di quei file dice PasswordAuthentication yes, la riga nel file principale non conta. Scrivi le tue opzioni in un file che si legge per primo, per esempio /etc/ssh/sshd_config.d/00-accesso.conf, perché i file si leggono in ordine alfabetico.
Controlla il valore effettivo con sudo sshd -T | grep -i passwordauthentication: -T stampa la configurazione effettiva risultante dai file. Poi verifica la sintassi con sudo sshd -t e riavvia: sudo systemctl restart ssh su Ubuntu e Debian, sudo systemctl restart sshd su Rocky Linux. Prima di riavviare, tieni aperta la sessione corrente e prova l'accesso da una sessione nuova.
Quali opzioni del server contano?
Il server si configura in /etc/ssh/sshd_config, con eventuali frammenti in /etc/ssh/sshd_config.d/. Le opzioni che incidono di più sulla sicurezza sono queste, con i valori predefiniti di sshd_config(5):
| Opzione | Predefinito | Valore in questa guida | Perché |
|---|---|---|---|
| Port | 22 | 22, o la porta scelta | Cambiarla riduce il rumore delle scansioni sulla 22 |
| PermitRootLogin | prohibit-password | no | Entri con un utente e usi sudo |
| PasswordAuthentication | yes | no | Niente tentativi sulle password |
| KbdInteractiveAuthentication | yes | no | Chiude anche la richiesta interattiva della password |
| PubkeyAuthentication | yes | yes | Serve per le chiavi |
| MaxAuthTries | 6 | 3 | Meno tentativi per connessione |
| X11Forwarding | no | no | Serve solo per applicazioni grafiche remote |
| AllowUsers | nessuna restrizione | gli utenti che devono entrare | Limita chi può collegarsi |
Prova ogni modifica su un server di test prima della produzione: una configurazione sbagliata può chiuderti fuori. Se preferisci affidare il lavoro a un sistemista, il server hardening di Rackone copre Proxmox VE e i web server: sui nodi Proxmox VE la checklist prevede SSH con chiavi, senza login diretto di root, limitato per sorgente e protetto dai tentativi ripetuti.
Opzioni del client e file ~/.ssh/config
Le opzioni del client si passano sulla riga di comando, e gli alias del file ~/.ssh/config evitano di ripeterle ogni volta. Le più usate:
| Opzione | Cosa fa |
|---|---|
-p | Indica la porta |
-i | Indica la chiave privata da usare |
-J | Passa da un host intermedio (jump host) |
-v | Mostra i dettagli di diagnosi, fino a tre livelli (-vvv) |
-C | Attiva la compressione |
-X | Inoltra X11, solo se il server lo permette |
Nel file ~/.ssh/config definisci un alias per ogni server:
Host server-dev
HostName 192.168.1.100
User sviluppatore
Port 2222
IdentityFile ~/.ssh/id_ed25519
Host server-prod
HostName produzione.example.com
User admin
ProxyJump bastione.example.com
Poi ti colleghi con il nome dell'alias:
ssh server-dev
ForwardAgent inoltra l'agente delle chiavi al server: ssh_config(5) chiede di attivarlo con cautela, quindi lascialo spento se non ti serve. LocalForward inoltra una porta del tuo computer, attraverso il canale cifrato, verso un host e una porta raggiungibili dal server. RemoteForward inoltra una porta del server verso il tuo lato.
Dove sono i log?
I log si leggono con journalctl su Ubuntu, Debian e Rocky Linux: sudo journalctl -u ssh su Ubuntu e Debian, sudo journalctl -u sshd su Rocky Linux. L'opzione -f li segue dal vivo, per esempio con journalctl -fu ssh.service su Ubuntu Server.
Esistono anche i file di testo. /var/log/auth.log c'è dove è installato rsyslog; da Debian 12 rsyslog non si installa più di default e i log si leggono con journalctl, come spiegano le note di rilascio di Debian 12 (§ 5.1.7). Sulla famiglia Red Hat, quindi su Rocky Linux, il file è /var/log/secure.
Cerca «Failed password» per i tentativi falliti con password e «Accepted» per gli accessi riusciti. Lo fai con grep sul file oppure con journalctl -u ssh | grep ....
Per log più dettagliati imposta LogLevel VERBOSE in sshd_config; il predefinito è INFO. Fail2Ban legge questi log e blocca gli indirizzi dopo tentativi falliti ripetuti.
Come si rende più veloce una sessione?
Su una rete lenta o instabile conviene intervenire sul client, con compressione, multiplexing e un keepalive.
Compressione:
-CoppureCompression yesaiuta sulle connessioni lente, mentre sulle reti veloci rallenta. Il predefinito è no.Multiplexing: una sola connessione viene riusata per più sessioni.
Host * ControlMaster auto ControlPath ~/.ssh/control-%h-%p-%r ControlPersist 10mKeepalive: per le disconnessioni dovute all'inattività imposta
ServerAliveInterval 60eServerAliveCountMax 3nel client; il valore predefinito diServerAliveIntervalè 0, cioè nessun messaggio (ssh_config(5)).
UseDNS non serve scriverlo, perché sshd lo ha già su no di default.
Errori di connessione SSH: cosa vogliono dire?
Per vedere dove si ferma la connessione, lancia il comando con l'opzione -v o, per più dettagli, -vvv. Poi cerca il messaggio nella tabella:
| Messaggio | Causa più probabile | Cosa fare |
|---|---|---|
Connection refused | Nessun servizio in ascolto su quella porta: sshd fermo o porta sbagliata | Controlla systemctl status ssh (o sshd) e la porta |
Connection timed out | Un firewall o la rete scarta i pacchetti, oppure l'indirizzo è sbagliato | Controlla la regola del firewall sulla porta e l'indirizzo; per la rete usa tracert e ping |
Permission denied (publickey) | Il server accetta solo chiavi e non accetta la tua: chiave sbagliata, utente sbagliato o permessi di ~/.ssh e authorized_keys troppo larghi | Con -v vedi quali chiavi offre il client; permessi 700 e 600 |
Too many authentication failures | L'agente offre troppe chiavi e supera MaxAuthTries | ssh -o IdentitiesOnly=yes -i ~/.ssh/id_ed25519 utente@indirizzo: IdentitiesOnly usa solo le chiavi indicate |
REMOTE HOST IDENTIFICATION HAS CHANGED | La chiave host del server è cambiata (per esempio dopo una reinstallazione) oppure la connessione è intercettata | Verifica la nuova impronta con chi gestisce il server, poi ssh-keygen -R indirizzo |
no matching host key type found. Their offer: ssh-rsa | Server vecchio che offre solo firme RSA con SHA-1, disattivate di default da OpenSSH 8.8 (settembre 2021) | Aggiorna il server; -o HostKeyAlgorithms=+ssh-rsa solo come ripiego temporaneo |
| Sessione che cade dopo un po' di inattività | Un firewall o un NAT chiude le connessioni ferme | Imposta il keepalive descritto sopra |
Con l'errore sulla chiave host non rimuovere la vecchia chiave a occhi chiusi: prima verifica l'impronta, perché il cambio della chiave può anche indicare un'intercettazione della connessione.
Le prime impostazioni su un server nuovo
Disabilita il login diretto di root e la password, verifica che il firewall consenta la porta configurata e controlla i log.
Per provarle su una macchina pulita, scegli una VPS Linux con accesso root: Ubuntu, Debian o Rocky Linux a tua scelta, con le chiavi caricate alla creazione.
Domande frequenti
Come si trasferiscono file con SSH?
Per trasferire file con SSH usi scp, che copia un file con scp file.txt utente@indirizzo:/percorso/, oppure sftp, che apre una sessione interattiva. Da OpenSSH 9.0 (aprile 2022) scp usa il protocollo SFTP di default. Entrambi i comandi passano sulla stessa connessione cifrata e usano le stesse chiavi dell'accesso.
Posso usare SSH da Windows?
Sì, puoi usare SSH da Windows. Al 27 ottobre 2026, secondo Microsoft Learn, da Windows 10 build 1809 e da Windows Server 2019 OpenSSH è una funzionalità di Windows da installare; su Windows Server 2025 è già installato ma non attivo. Il client è lo stesso: ssh fa parte di OpenSSH per Windows.
Cosa faccio se perdo la chiave privata SSH?
Una chiave privata SSH persa non si recupera. Genera una coppia nuova, copia la nuova chiave pubblica sui server e togli la vecchia dal file authorized_keys di ogni server, così chi la trova non può entrare. Per non restare fuori dai server, tieni una seconda chiave in un posto sicuro.
Come vedo quale versione di OpenSSH ho?
Sul client la versione di OpenSSH si legge con ssh -V; sul server è la versione del pacchetto openssh-server installato. Da OpenSSH 9.5 ssh-keygen genera chiavi Ed25519 per impostazione predefinita; da OpenSSH 10.0 lo scambio di chiavi predefinito usa l'algoritmo ibrido post-quantistico.
Posso usare la stessa chiave SSH su più server?
Sì, la stessa chiave SSH funziona su più server: copi la chiave pubblica nel file authorized_keys di ciascuno e la chiave privata resta solo sul tuo computer. Usa chiavi diverse per produzione e test, così limiti il numero di server accessibili con ciascuna chiave.
Fonti
- OpenSSH, release notes, consultata il
- OpenBSD, sshd_config(5), consultata il
- OpenBSD, ssh_config(5), consultata il
- OpenBSD, sshd(8), consultata il
- OpenBSD, ssh(1), consultata il
- Ubuntu Server, OpenSSH server, consultata il
- Ubuntu Discourse, SSHd now uses socket-based activation (Ubuntu 22.10 and later), consultata il
- Ubuntu Launchpad, bug 2069041: changing Port in sshd_config requires systemctl daemon-reload, consultata il
- Red Hat Enterprise Linux 10, Securing networks, consultata il
- Debian 12, note di rilascio: cambiamenti al logging di sistema, consultata il
- Microsoft Learn, OpenSSH for Windows overview, consultata il
- Debian Wiki, Daemon, consultata il
- Red Hat Enterprise Linux 10, Troubleshooting problems by using log files, consultata il
- Fail2Ban, consultata il
- OpenBSD, ssh-keygen(1), consultata il
- OpenBSD, ssh-add(1), consultata il
- ssh-copy-id(1), man-pages, consultata il
Scritto da Rackone