Salta al contenuto
Rackone

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

Un computer collegato a un server in rack da un tunnel cifrato sulla porta 22, sotto il titolo Accesso SSH
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:

  1. Il client apre la connessione TCP verso il server, di solito sulla porta 22.
  2. Client e server concordano versione e algoritmi.
  3. 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.
  4. 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)).
  5. Tu ti autentichi, con la chiave o con la password.
  6. 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:

DistribuzioneDopo la modificaNota
Ubuntu 24.04 LTSsudo systemctl daemon-reload, poi sudo systemctl restart ssh.socketSocket di systemd: la porta si rilegge solo con daemon-reload
Debiansudo systemctl restart sshIl 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:

  1. 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 ed25519 lo 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.

  2. Copia la chiave pubblica sul server:

    ssh-copy-id -i ~/.ssh/id_ed25519.pub utente@indirizzo
    

    In alternativa aggiungila a mano in ~/.ssh/authorized_keys del server. La cartella ~/.ssh deve essere accessibile solo al proprietario (700) e authorized_keys leggibile e scrivibile solo da lui (600). sshd ignora authorized_keys se altri utenti possono scriverci (sshd(8), StrictModes).

  3. Prova la connessione: non deve più chiederti la password dell'utente, solo la passphrase.

  4. 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):

OpzionePredefinitoValore in questa guidaPerché
Port2222, o la porta sceltaCambiarla riduce il rumore delle scansioni sulla 22
PermitRootLoginprohibit-passwordnoEntri con un utente e usi sudo
PasswordAuthenticationyesnoNiente tentativi sulle password
KbdInteractiveAuthenticationyesnoChiude anche la richiesta interattiva della password
PubkeyAuthenticationyesyesServe per le chiavi
MaxAuthTries63Meno tentativi per connessione
X11ForwardingnonoServe solo per applicazioni grafiche remote
AllowUsersnessuna restrizionegli utenti che devono entrareLimita 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:

OpzioneCosa fa
-pIndica la porta
-iIndica la chiave privata da usare
-JPassa da un host intermedio (jump host)
-vMostra i dettagli di diagnosi, fino a tre livelli (-vvv)
-CAttiva la compressione
-XInoltra 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: -C oppure Compression yes aiuta 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 10m
    
  • Keepalive: per le disconnessioni dovute all'inattività imposta ServerAliveInterval 60 e ServerAliveCountMax 3 nel client; il valore predefinito di ServerAliveInterval è 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:

MessaggioCausa più probabileCosa fare
Connection refusedNessun servizio in ascolto su quella porta: sshd fermo o porta sbagliataControlla systemctl status ssh (o sshd) e la porta
Connection timed outUn firewall o la rete scarta i pacchetti, oppure l'indirizzo è sbagliatoControlla 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 larghiCon -v vedi quali chiavi offre il client; permessi 700 e 600
Too many authentication failuresL'agente offre troppe chiavi e supera MaxAuthTriesssh -o IdentitiesOnly=yes -i ~/.ssh/id_ed25519 utente@indirizzo: IdentitiesOnly usa solo le chiavi indicate
REMOTE HOST IDENTIFICATION HAS CHANGEDLa chiave host del server è cambiata (per esempio dopo una reinstallazione) oppure la connessione è intercettataVerifica la nuova impronta con chi gestisce il server, poi ssh-keygen -R indirizzo
no matching host key type found. Their offer: ssh-rsaServer 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 fermeImposta 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

Articoli correlati

Chiama Parla con un esperto