- 1 1. Introduzione
- 2 2. Configurazione di base di SSH
- 3 Conclusione
- 4 3. Rafforzare la sicurezza di SSH
- 5 Conclusione
- 6 4. Configurazione SSH Avanzata
- 7 Conclusione
- 8 5. Risoluzione dei problemi SSH
- 9 Conclusione
- 10 6. FAQ (Domande Frequenti)
- 10.1 6.1 Come risolvere i problemi di timeout SSH?
- 10.2 6.2 Cosa fare se dimentichi la password SSH?
- 10.3 6.3 Come usare SSH su Windows?
- 10.4 6.4 Come configurare SSH su Ubuntu WSL?
- 10.5 6.5 Ulteriori best practice di sicurezza
- 10.6 6.6 Come monitorare i log SSH in tempo reale?
- 10.7 6.7 Suggerimenti per usare SSH più comodamente
- 11 Conclusione
1. Introduzione
Configurare SSH su Ubuntu è fondamentale per gestire server remoti. SSH (Secure Shell) è un protocollo che fornisce comunicazioni crittografate sicure, consentendo agli utenti di accedere ai server da remoto, eseguire comandi e trasferire file.
Questo articolo spiega come configurare SSH su Ubuntu, dai passaggi di installazione di base alle misure di sicurezza avanzate.
1.1 Perché configurare SSH su Ubuntu?
1.1.1 Che cos’è SSH?
SSH (Secure Shell) è un protocollo che consente comunicazioni sicure su una rete. È comunemente usato per accedere a server remoti, trasferire file e creare tunnel (port forwarding). A differenza di Telnet o FTP tradizionali, SSH cripta tutte le comunicazioni, fornendo una forte sicurezza.
1.1.2 Quando è necessario SSH su Ubuntu
Scenari comuni in cui SSH viene usato per gestire Ubuntu da remoto includono:
- Amministrazione di server cloud : i server Linux su AWS, GCP, Vultr e altri sono tipicamente accessibili tramite SSH.
- Operazioni remote in ambienti LAN : accesso a server interni o macchine di sviluppo da remoto.
- Gestione di dispositivi IoT : controllo di sistemi embedded come Raspberry Pi da remoto.
Per impostazione predefinita, il server SSH è disabilitato su Ubuntu, quindi deve essere installato e configurato manualmente per abilitare l’accesso SSH.
2. Configurazione di base di SSH
Per usare SSH su Ubuntu, è necessario installare il server SSH (OpenSSH) e configurarlo correttamente. Questa sezione spiega come installare SSH, regolare le impostazioni di base, configurare il firewall e connettersi al server.
2.1 Installazione e avvio di OpenSSH
2.1.1 Che cos’è OpenSSH?
OpenSSH (Open Secure Shell) è un’implementazione open‑source del protocollo SSH. Supporta connessioni remote, trasferimenti sicuri di file (SCP e SFTP) e port forwarding.
2.1.2 Installazione di OpenSSH
Ubuntu non include un server SSH di default, quindi installalo usando il comando seguente:
sudo apt update && sudo apt install -y openssh-server
Questo aggiorna gli elenchi dei pacchetti e installa il server OpenSSH.
2.1.3 Avvio di SSH e abilitazione dell’avvio automatico
Dopo l’installazione, avvia il server SSH e abilita l’avvio automatico:
sudo systemctl enable --now ssh
L’opzione enable garantisce che SSH si avvii automaticamente all’avvio del sistema operativo.
2.1.4 Verifica dello stato di SSH
Controlla che SSH sia in esecuzione:
systemctl status ssh
Se l’output mostra active (running), SSH funziona normalmente:
● ssh.service - OpenBSD Secure Shell server
Loaded: loaded (/lib/systemd/system/ssh.service; enabled; vendor preset: enabled)
Active: active (running) since Fri 2025-02-28 12:00:00 UTC; 5min ago
Se mostra inactive (dead) o failed, avvia SSH manualmente:
sudo systemctl start ssh
2.2 Configurazione del firewall (UFW)
Ubuntu include un firewall semplice chiamato ufw (Uncomplicated Firewall). È necessario consentire le connessioni SSH attraverso di esso.
2.2.1 Verifica dello stato di UFW
sudo ufw status
Esempio di output (inactive):
Status: inactive
Esempio di output (active):
Status: active
To Action From
-- ------ ----
22/tcp ALLOW Anywhere
2.2.2 Consenti SSH
sudo ufw allow ssh
Oppure in modo esplicito:
sudo ufw allow 22/tcp
2.2.3 Abilitazione di UFW
sudo ufw enable
2.2.4 Verifica delle regole di UFW
sudo ufw status verbose
Esempio:
Status: active
To Action From
-- ------ ----
22/tcp ALLOW Anywhere
22/tcp (v6) ALLOW Anywhere (v6)
2.3 Metodi di connessione SSH di base
Una volta che SSH è in esecuzione, connettiti da una macchina client.
2.3.1 Connessione da Linux/macOS
ssh username@server-ip-address
Esempio:
ssh user@192.168.1.100
Potresti vedere un avviso di sicurezza al primo collegamento:
The authenticity of host '192.168.1.100 (192.168.1.100)' can't be established.
ECDSA key fingerprint is SHA256:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.
Are you sure you want to continue connecting (yes/no)?
Digitare yes per continuare.
2.3.2 Connessione da Windows
Puoi usare PowerShell o PuTTY.
Utilizzo di PowerShell (Windows 10+ include SSH):
ssh username@server-ip-address
Utilizzo di PuTTY:
- Scarica PuTTY dal sito ufficiale
- Apri PuTTY e inserisci l’IP del server in
Host Name (or IP address) - Seleziona
SSHcome tipo di connessione - Clicca su Open e accedi
Conclusione
Questa sezione ha coperto le basi della configurazione di SSH su Ubuntu:
- Come installare e avviare OpenSSH
- Come consentire connessioni SSH con UFW
- Come connettersi da Linux/macOS e Windows
3. Rafforzare la sicurezza di SSH
SSH è potente, ma lasciarlo con le impostazioni predefinite aumenta i rischi di sicurezza. Gli aggressori spesso tentano attacchi di forza bruta o scansioni di porte. Rafforzare la sicurezza di SSH è essenziale.
3.1 Disabilitare l’accesso root
L’accesso root fornisce il controllo completo del sistema ed è un obiettivo principale per gli aggressori. Disabilitarlo migliora la sicurezza.
3.1.1 Passaggi
- Modifica il file di configurazione SSH:
sudo nano /etc/ssh/sshd_config
- Cambia la riga in:
PermitRootLogin no
- Riavvia SSH:
sudo systemctl restart ssh
- Conferma la modifica:
sudo grep PermitRootLogin /etc/ssh/sshd_config
Se l’output è PermitRootLogin no, l’impostazione è stata applicata.
3.2 Disabilitare l’autenticazione con password e usare l’autenticazione con chiave
L’autenticazione con chiave pubblica è più sicura delle password e riduce i rischi di attacchi di forza bruta.
3.2.1 Creazione delle chiavi SSH
ssh-keygen -t rsa -b 4096 -f ~/.ssh/id_rsa
Questo genera due file:
- id_rsa (chiave privata) — conserva localmente, non condividerla mai
- id_rsa.pub (chiave pubblica) — caricala sul server
3.2.2 Caricamento della chiave pubblica
ssh-copy-id username@server-ip-address
3.2.3 Disabilitare l’autenticazione con password
sudo nano /etc/ssh/sshd_config
Modifica:
PasswordAuthentication no
Riavvia SSH:
sudo systemctl restart ssh
3.3 Consentire l’accesso SSH solo a utenti specifici
Per migliorare la sicurezza di SSH, puoi limitare l’accesso in modo che solo alcuni utenti possano accedere.
3.3.1 Passaggi di configurazione
- Apri il file di configurazione SSH
/etc/ssh/sshd_config:sudo nano /etc/ssh/sshd_config
- Aggiungi gli utenti autorizzati ad accedere via SSH:
AllowUsers username1 username2
- Riavvia SSH per applicare le impostazioni:
sudo systemctl restart ssh
3.4 Cambiare la porta SSH
Poiché la porta 22 è frequentemente bersaglio degli aggressori, cambiare la porta predefinita può migliorare la sicurezza.
3.4.1 Passaggi di configurazione
- Apri il file di configurazione SSH:
sudo nano /etc/ssh/sshd_config
- Modifica l’impostazione della porta, ad esempio:
Port 2200
- Riavvia SSH:
sudo systemctl restart ssh
3.4.2 Aggiornare le impostazioni del firewall
Se cambi la porta, aggiorna UFW:
sudo ufw allow 2200/tcp
Verifica la nuova regola:
sudo ufw status
3.5 Prevenire attacchi di forza bruta con Fail2Ban
Fail2Ban rileva i tentativi di accesso falliti e blocca l’IP aggressore per un periodo specificato.
3.5.1 Installare Fail2Ban
sudo apt install fail2ban -y
3.5.2 Creare un file di configurazione
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
Apri il file:
sudo nano /etc/fail2ban/jail.local
Modifica le impostazioni:
[sshd]
enabled = true
port = 2200
maxretry = 3
findtime = 600
bantime = 3600
3.5.3 Riavviare Fail2Ban
sudo systemctl restart fail2ban
3.5.4 Verificare la lista dei ban
sudo fail2ban-client status sshd
Conclusione
Questa sezione ha spiegato i metodi per migliorare la sicurezza di SSH:
- Disabilita l’accesso root
- Disabilita l’autenticazione con password e abilita l’autenticazione con chiave
- Limita l’accesso SSH a utenti specifici
- Cambia la porta SSH
- Usa Fail2Ban per bloccare i tentativi non autorizzati
Implementare queste impostazioni aiuta a creare un ambiente SSH sicuro.

4. Configurazione SSH Avanzata
Una volta completata la configurazione di base di SSH e l’indurimento della sicurezza, puoi passare a funzionalità avanzate per migliorare flessibilità e sicurezza. Questa sezione copre la gestione di ssh.socket (Ubuntu 22.10+), i tunnel SSH, l’ascolto su più porte e il controllo degli accessi basato su IP.
4.1 Utilizzo di ssh.socket su Ubuntu 22.10+
In Ubuntu 22.10+, SSH può essere gestito da ssh.socket anziché da ssh.service. Questa attivazione basata su socket avvia SSH solo quando necessario, risparmiando risorse di sistema.
4.1.1 Verifica lo stato di ssh.socket
sudo systemctl status ssh.socket
Esempio di output (abilitato):
● ssh.socket - OpenSSH Server Socket
Loaded: loaded (/lib/systemd/system/ssh.socket; enabled; vendor preset: enabled)
Active: active (listening) since Fri 2025-02-28 12:00:00 UTC
4.1.2 Abilita o Disabilita ssh.socket
Abilita il socket:
sudo systemctl enable --now ssh.socket
Ritorna al classico ssh.service:
sudo systemctl disable --now ssh.socket
sudo systemctl enable --now ssh.service
4.2 Tunnel SSH (Port Forwarding)
Il tunneling SSH stabilisce canali di comunicazione sicuri tra sistemi locali e remoti.
4.2.1 Port Forwarding Locale
Utile per connettersi in modo sicuro a database remoti o servizi interni.
Esempio: Accedere a un server MySQL remoto sulla porta 3306
ssh -L 3306:localhost:3306 username@server-ip-address
4.2.2 Port Forwarding Inverso
Espone servizi locali tramite un server remoto.
Esempio: Pubblicare un server web locale sulla porta remota 8080
ssh -R 8080:localhost:80 username@server-ip-address
4.2.3 Port Forwarding Dinamico (Proxy SOCKS)
Usa SSH come proxy SOCKS per navigazione anonima.
ssh -D 1080 username@server-ip-address
4.3 Ascolto su più porte
SSH può ascoltare su più di una porta per offrire flessibilità in diversi ambienti di rete.
4.3.1 Passaggi di configurazione
- Modifica
/etc/ssh/sshd_config:sudo nano /etc/ssh/sshd_config
- Aggiungi più righe
Port:Port 22 Port 2200
- Riavvia SSH:
sudo systemctl restart ssh
- Consenti la nuova porta con UFW:
sudo ufw allow 2200/tcp
4.4 Consenti SSH solo da indirizzi IP specifici
Limitare l’accesso SSH per indirizzo IP offre un forte controllo di sicurezza.
4.4.1 Configura /etc/hosts.allow
sudo nano /etc/hosts.allow
Aggiungi un indirizzo IP consentito:
sshd: 192.168.1.100
4.4.2 Configura /etc/hosts.deny
sudo nano /etc/hosts.deny
Nega tutti gli altri:
sshd: ALL
Conclusione
Questa sezione ha trattato argomenti di configurazione SSH avanzata:
- Gestione di
ssh.socketin Ubuntu 22.10+ - Utilizzo dei tunnel SSH (port forwarding)
- Ascolto su più porte SSH
- Restrizione dell’accesso SSH a indirizzi IP specifici
Applicare queste configurazioni migliora sia la sicurezza sia la usabilità.
5. Risoluzione dei problemi SSH
Anche con una configurazione corretta, le connessioni SSH possono occasionalmente fallire. Questa sezione spiega i problemi SSH più comuni e le loro soluzioni.
5.1 Quando SSH non riesce a connettersi
Se SSH restituisce Connection refused o scade il timeout, le cause possibili includono problemi di servizio, configurazione errata della porta o restrizioni del firewall.
5.1.1 Il servizio SSH non è in esecuzione
sudo systemctl status ssh
Soluzione:
- Se
inactiveofailed, riavvia SSH:sudo systemctl restart ssh
- Abilita l’avvio automatico:
sudo systemctl enable ssh
5.1.2 Porta SSH non aperta
ssh -p 2200 username@server-ip-address
Verifica le porte aperte:
sudo netstat -tulnp | grep ssh
Or:
ss -tulnp | grep ssh
5.1.3 Firewall (UFW) che blocca SSH
sudo ufw status
Consenti SSH:
sudo ufw allow 22/tcp
Se si utilizza una porta personalizzata:
sudo ufw allow 2200/tcp
5.2 Errori di autenticazione
5.2.1 Nome utente o password errati
ssh username@server-ip-address
5.2.2 Chiave pubblica non installata correttamente
cat ~/.ssh/authorized_keys
Verifica che corrisponda al file locale id_rsa.pub.
5.2.3 Permessi errati sulla directory .ssh
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys
Assicurati anche che:
chmod 755 /home/username
5.3 Connessioni SSH instabili o disconnessioni inaspettate
5.3.1 Regola ClientAliveInterval
ClientAliveInterval 60
ClientAliveCountMax 3
sudo systemctl restart ssh
5.3.2 Regola le impostazioni del client locale
Host *
ServerAliveInterval 60
ServerAliveCountMax 3
5.4 Visualizzare i log SSH
5.4.1 Visualizzare i log in tempo reale
sudo journalctl -u ssh -f
5.4.2 Visualizzare i log passati
sudo cat /var/log/auth.log | grep ssh
sudo grep "Failed password" /var/log/auth.log
Conclusione
Questa sezione ha spiegato i problemi SSH più comuni e come risolverli:
- Verifica se il servizio SSH è in esecuzione
- Verifica le porte aperte
- Controlla le impostazioni del firewall
- Assicurati che l’autenticazione con chiave sia corretta
- Risolvi i problemi di timeout e disconnessione
- Analizza i log SSH
La maggior parte dei problemi SSH deriva da una cattiva configurazione o da limitazioni di rete. Usa questi passaggi di risoluzione dei problemi per risolvere i problemi in modo efficiente.
6. FAQ (Domande Frequenti)
Questa sezione risponde alle domande più comuni relative all’uso e alla configurazione di SSH.
6.1 Come risolvere i problemi di timeout SSH?
6.1.1 Impostazioni lato server
ClientAliveInterval 60
ClientAliveCountMax 3
sudo systemctl restart ssh
6.1.2 Impostazioni lato client
Host *
ServerAliveInterval 60
ServerAliveCountMax 3
6.2 Cosa fare se dimentichi la password SSH?
6.2.1 Se hai accesso fisico
- Avvia in modalità single-user (seleziona
recovery modeda GRUB) - Reimposta la password:
passwd username
- Riavvia il sistema
6.2.2 Se l’accesso fisico non è possibile (VPS cloud)
- Usa la console VPS fornita dal servizio di hosting
- Usa l’autenticazione con chiave pubblica
6.3 Come usare SSH su Windows?
6.3.1 Uso di PowerShell
ssh username@server-ip-address
6.3.2 Uso di PuTTY
- Scarica e installa PuTTY
- Inserisci l’indirizzo IP del server in
Host Name - Seleziona
SSHcome tipo di connessione - Accedi con nome utente e password
6.4 Come configurare SSH su Ubuntu WSL?
6.4.1 Installa il server SSH
sudo apt update && sudo apt install openssh-server
6.4.2 Modifica le impostazioni SSH
PasswordAuthentication yes
Avvia SSH manualmente (WSL non utilizza systemd):
sudo service ssh start
6.5 Ulteriori best practice di sicurezza
6.5.1 Usa Fail2Ban
sudo apt install fail2ban -y
[sshd]
enabled = true
port = 22
maxretry = 3
findtime = 600
bantime = 3600
sudo systemctl restart fail2ban
6.5.2 Cambia la porta SSH
Port 2200
sudo ufw allow 2200/tcp
6.6 Come monitorare i log SSH in tempo reale?
sudo journalctl -u ssh -f
sudo cat /var/log/auth.log | grep ssh
6.7 Suggerimenti per usare SSH più comodamente
6.7.1 Usa .ssh/config per login semplici
Host myserver
HostName 192.168.1.100
User user
Port 2200
IdentityFile ~/.ssh/id_rsa
Quindi connettiti con:
ssh myserver
6.7.2 Usa ssh-agent
eval $(ssh-agent -s)
ssh-add ~/.ssh/id_rsa
Conclusione
Questa sezione ha riassunto le domande frequenti relative a SSH:
- Come risolvere i problemi di timeout SSH
- Come recuperare una password dimenticata
- Come usare SSH su Windows e WSL
- Migliori pratiche di sicurezza
- Come controllare i log SSH
- Suggerimenti per rendere SSH più comodo usando
.ssh/config
Applicando queste tecniche, puoi creare un ambiente SSH sicuro ed efficiente e gestire i server remoti in modo fluido.


