Guida completa alla configurazione di SSH su Ubuntu: installazione, rafforzamento della sicurezza, configurazione avanzata e risoluzione dei problemi

目次

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:

  1. Scarica PuTTY dal sito ufficiale
  2. Apri PuTTY e inserisci l’IP del server in Host Name (or IP address)
  3. Seleziona SSH come tipo di connessione
  4. 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

  1. Modifica il file di configurazione SSH:
    sudo nano /etc/ssh/sshd_config
    
  1. Cambia la riga in:
    PermitRootLogin no
    
  1. Riavvia SSH:
    sudo systemctl restart ssh
    
  1. 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

  1. Apri il file di configurazione SSH /etc/ssh/sshd_config :
    sudo nano /etc/ssh/sshd_config
    
  1. Aggiungi gli utenti autorizzati ad accedere via SSH:
    AllowUsers username1 username2
    
  1. 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

  1. Apri il file di configurazione SSH:
    sudo nano /etc/ssh/sshd_config
    
  1. Modifica l’impostazione della porta, ad esempio:
    Port 2200
    
  1. 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

  1. Modifica /etc/ssh/sshd_config :
    sudo nano /etc/ssh/sshd_config
    
  1. Aggiungi più righe Port:
    Port 22
    Port 2200
    
  1. Riavvia SSH:
    sudo systemctl restart ssh
    
  1. 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.socket in 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 inactive o failed, 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

  1. Avvia in modalità single-user (seleziona recovery mode da GRUB)
  2. Reimposta la password:
    passwd username
    
  1. 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

  1. Scarica e installa PuTTY
  2. Inserisci l’indirizzo IP del server in Host Name
  3. Seleziona SSH come tipo di connessione
  4. 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.