Guida completa alla configurazione SSH di Ubuntu | Installazione, potenziamento della sicurezza 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, ampiamente usato per l’accesso a server remoti, l’esecuzione di comandi e il trasferimento di file.
In questa guida copriremo tutto, dall’installazione di base alle configurazioni di sicurezza avanzate per SSH su Ubuntu.

1.1 Perché configurare SSH su Ubuntu?

1.1.1 Che cos’è SSH?

SSH (Secure Shell) è un protocollo progettato per comunicazioni sicure su una rete. È comunemente usato per accedere a server remoti, trasferire file e creare tunnel (port forwarding). A differenza di protocolli tradizionali come Telnet o FTP, SSH cripta tutte le comunicazioni, rendendole altamente sicure.

1.1.2 Quando serve SSH su Ubuntu?

SSH è utile per la gestione remota in vari scenari, come:

  • Gestione di server cloud : servizi cloud come AWS, GCP e Vultr usano SSH per l’accesso remoto ai server.
  • Operazioni remote in un ambiente LAN : accedere a server interni o macchine di sviluppo via SSH per lavoro remoto.
  • Gestione di dispositivi IoT : controllare a distanza dispositivi embedded come Raspberry Pi.

Per impostazione predefinita, SSH è disabilitato su Ubuntu. Per usarlo, è necessario installarlo e configurarlo manualmente.

2. Configurazione di base di SSH

Per usare SSH su Ubuntu, è necessario installare il server SSH (OpenSSH) e configurarlo correttamente. Questa sezione copre l’installazione, le impostazioni di base, la configurazione del firewall e come connettersi al proprio 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

Per impostazione predefinita, Ubuntu non include un server SSH pre‑installato. Usa il comando seguente per installarlo:

sudo apt update && sudo apt install -y openssh-server

Questo comando aggiorna l’elenco dei pacchetti e installa il server OpenSSH.

2.1.3 Avvio e abilitazione del server SSH

Una volta installato, avvia il server SSH e abilitalo affinché si avvii all’accensione.

sudo systemctl enable --now ssh

L’opzione enable garantisce che SSH parta automaticamente quando il sistema operativo si avvia.

2.1.4 Verifica dello stato di SSH

Per controllare se il server SSH è in esecuzione, usa:

systemctl status ssh

Se vedi un output simile al seguente, SSH è in esecuzione correttamente:

● 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 vedi inactive (dead) o failed, avvia il servizio manualmente:

sudo systemctl start ssh

2.2 Configurazione del firewall (UFW)

Ubuntu fornisce ufw (Uncomplicated Firewall) per una gestione semplice del firewall. È necessario configurare UFW per consentire le connessioni SSH.

2.2.1 Controllo dello stato di UFW

Verifica lo stato attuale del firewall con:

sudo ufw status

Esempio di output (se UFW è disabilitato):

Status: inactive

Esempio di output (se UFW è abilitato):

Status: active
To                         Action      From
--                         ------      ----
22/tcp                     ALLOW       Anywhere

2.2.2 Consenti il traffico SSH

Per consentire le connessioni SSH sulla porta predefinita 22, esegui:

sudo ufw allow ssh

In alternativa, specifica esplicitamente la porta:

sudo ufw allow 22/tcp

2.2.3 Abilitazione di UFW

Se UFW è disabilitato, abilitalo con:

sudo ufw enable

Prima di abilitare UFW, assicurati che SSH sia consentito, altrimenti potresti rimanere bloccato fuori.

2.2.4 Verifica delle impostazioni di UFW

Controlla se le regole del firewall sono state applicate correttamente:

sudo ufw status verbose

Esempio di output:

Status: active
To                         Action      From
--                         ------      ----
22/tcp                     ALLOW       Anywhere
22/tcp (v6)                ALLOW       Anywhere (v6)

Se vedi questo, SSH è consentito attraverso il firewall.

2.3 Connessione a SSH

Una volta che il server SSH è in esecuzione, puoi connetterti da un PC client.

2.3.1 Connessione da Linux/macOS

Su Linux o macOS, apri un terminale ed esegui:

ssh username@server-ip-address

Esempio:

ssh user@192.168.1.100

Al primo collegamento, potresti vedere un avviso di sicurezza come questo:

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)?

Digita yes e premi Invio per continuare.

2.3.2 Connessione da Windows

Su Windows, puoi usare PowerShell o PuTTY per connetterti via SSH.
Utilizzo di PowerShell
Windows 10 e versioni successive includono un client SSH in PowerShell. Connettiti con:

ssh username@server-ip-address

Utilizzo di PuTTY

  1. Scarica e installa PuTTY dal sito ufficiale .
  2. Apri PuTTY e inserisci l’indirizzo IP del server in Host Name (or IP address) .
  3. Imposta Connection type su SSH e fai clic su Open .
  4. Inserisci il tuo nome utente e la password per connetterti.

3. Migliorare la Sicurezza di SSH

SSH è uno strumento potente per l’accesso remoto, ma lasciarlo con le impostazioni predefinite può comportare rischi di sicurezza. Gli aggressori spesso prendono di mira i server SSH usando attacchi di forza bruta o scansioni di porte. Per creare un ambiente SSH più sicuro, è fondamentale applicare configurazioni di sicurezza adeguate.

3.1 Disabilitare l’accesso root

Per impostazione predefinita, Ubuntu può consentire l’accesso root via SSH. Poiché l’account root ha privilegi di sistema completi, è un obiettivo comune per gli aggressori. Disabilitare l’accesso root e utilizzare invece un account utente normale migliora notevolmente la sicurezza.

3.1.1 Passaggi di configurazione

  1. Modifica il file di configurazione SSH /etc/ssh/sshd_config .
    sudo nano /etc/ssh/sshd_config
    
  1. Trova la seguente riga e cambiala in PermitRootLogin no .
    PermitRootLogin no
    
  1. Salva il file e riavvia il servizio SSH.
    sudo systemctl restart ssh
    
  1. Verifica che l’impostazione sia stata applicata.
    sudo grep PermitRootLogin /etc/ssh/sshd_config
    

Se l’output mostra PermitRootLogin no, l’impostazione è stata applicata con successo.

3.2 Disabilitare l’autenticazione con password e abilitare l’autenticazione con chiave pubblica

Utilizzare l’autenticazione con chiave pubblica è molto più sicuro rispetto all’affidarsi all’autenticazione con password. Con l’autenticazione a chiave pubblica, non è necessario inserire una password, riducendo il rischio di attacchi di forza bruta.

3.2.1 Generare una coppia di chiavi SSH

Sul tuo PC locale, genera una coppia di chiavi SSH:

ssh-keygen -t rsa -b 4096 -f ~/.ssh/id_rsa

Questo creerà due file:

  • Chiave privata (id_rsa)Conserva questa sul tuo PC locale (non condividerla mai pubblicamente).
  • Chiave pubblica (id_rsa.pub)Copia questa sul server.

3.2.2 Copiare la chiave pubblica sul server

Usa il seguente comando per copiare la tua chiave pubblica sul server:

ssh-copy-id username@server-ip-address

3.2.3 Disabilitare l’autenticazione con password

Modifica il file di configurazione SSH:

sudo nano /etc/ssh/sshd_config

Trova la seguente riga e cambiala in:

PasswordAuthentication no

Riavvia SSH per applicare le modifiche:

sudo systemctl restart ssh

3.3 Limitare l’accesso SSH a utenti specifici

Per migliorare la sicurezza, puoi limitare l’accesso SSH a utenti specifici.

3.3.1 Passaggi di configurazione

  1. Apri il file di configurazione SSH.
    sudo nano /etc/ssh/sshd_config
    
  1. Aggiungi la seguente riga, specificando gli utenti consentiti.
    AllowUsers user1 user2
    
  1. Riavvia SSH per applicare le modifiche.
    sudo systemctl restart ssh
    

3.4 Cambiare la porta SSH

La porta SSH predefinita (22) è frequentemente bersaglio degli aggressori. Cambiarla a una porta non standard può ridurre il rischio di attacchi automatizzati.

3.4.1 Passaggi di configurazione

  1. Apri il file di configurazione SSH.
    sudo nano /etc/ssh/sshd_config
    
  1. Trova la riga seguente e cambiala con una porta personalizzata (ad es., 2200 ).
    Port 2200
    
  1. Salva il file e riavvia SSH.
    sudo systemctl restart ssh
    

3.4.2 Aggiornamento delle impostazioni del firewall

Dopo aver cambiato la porta SSH, consenti la nuova porta tramite UFW:

sudo ufw allow 2200/tcp

Verifica le impostazioni:

sudo ufw status

3.5 Prevenire gli attacchi brute force con Fail2Ban

Fail2Ban è uno strumento che rileva i tentativi di accesso SSH falliti e blocca temporaneamente l’indirizzo IP dell’attaccante.

3.5.1 Installazione di Fail2Ban

sudo apt install fail2ban -y

3.5.2 Creazione di un file di configurazione

Copia il file di configurazione predefinito:

sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local

Modifica il file di configurazione:

sudo nano /etc/fail2ban/jail.local

Modifica la sezione SSH come segue:

[sshd]
enabled = true
port = 2200
maxretry = 3
findtime = 600
bantime = 3600

3.5.3 Riavvio di Fail2Ban

Riavvia Fail2Ban per applicare le modifiche:

sudo systemctl restart fail2ban

3.5.4 Controllo della lista dei ban

Per verificare quali IP sono bannati:

sudo fail2ban-client status sshd

Riepilogo

In questa sezione, abbiamo trattato le principali migliorie della sicurezza SSH, includendo:

  • Disabilitare l’accesso root
  • Disabilitare l’autenticazione con password e abilitare l’autenticazione con chiave pubblica
  • Limitare l’accesso SSH a utenti specifici
  • Modificare la porta SSH
  • Utilizzare Fail2Ban per bloccare gli attacchi brute force

Implementando queste misure, puoi creare un ambiente SSH più sicuro.

4. Configurazione avanzata di SSH

Dopo aver configurato la sicurezza SSH, puoi sfruttare impostazioni avanzate per migliorare usabilità e sicurezza. Questa sezione copre la gestione di ssh.socket in Ubuntu 22.10 e successive, il tunneling SSH (port forwarding), la configurazione di più porte SSH e la limitazione dell’accesso SSH a indirizzi IP specifici.

4.1 Uso di ssh.socket in Ubuntu 22.10 e successive

A partire da Ubuntu 22.10, la gestione del servizio SSH può passare da ssh.service a ssh.socket. Questo consente a SSH di avviarsi dinamicamente quando viene ricevuta una richiesta di connessione, riducendo l’uso delle risorse.

4.1.1 Verifica dello stato di ssh.socket

Per verificare se ssh.socket è abilitato, esegui:

sudo systemctl status ssh.socket

Esempio di output (se 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 Abilitare o disabilitare ssh.socket

Se ssh.socket è disabilitato, abilitalo con:

sudo systemctl enable --now ssh.socket

Per tornare al tradizionale ssh.service, disabilita ssh.socket e abilita ssh.service al suo posto:

sudo systemctl disable --now ssh.socket
sudo systemctl enable --now ssh.service

4.2 Tunneling SSH (Port Forwarding)

Il tunneling SSH consente la trasmissione sicura dei dati tra un server remoto e un PC locale, aggirando le reti esterne.

4.2.1 Port forwarding locale

Utile per accedere in modo sicuro a database remoti o server web.

Esempio: Connessione a un server MySQL remoto (porta 3306) dal tuo PC locale

ssh -L 3306:localhost:3306 username@server-ip-address

4.2.2 Port forwarding remoto

Espone un servizio locale a un server remoto tramite SSH.

Esempio: Forwarding di un server web locale (porta 80) alla porta 8080 su un server remoto

ssh -R 8080:localhost:80 username@server-ip-address

4.2.3 Port forwarding dinamico

Trasforma SSH in un proxy SOCKS per la navigazione web anonima.

Esempio: Creazione di un proxy SOCKS sulla porta locale 1080

ssh -D 1080 username@server-ip-address

4.3 Ascolto su più porte SSH

Per impostazione predefinita, SSH ascolta su una sola porta (porta 22). Configurare più porte consente maggiore flessibilità di accesso.

4.3.1 Passaggi di configurazione

  1. Modifica il file di configurazione SSH.
    sudo nano /etc/ssh/sshd_config
    
  1. Aggiungi più voci di porta.
    Port 22
    Port 2200
    
  1. Riavvia SSH.
    sudo systemctl restart ssh
    
  1. Consenti la nuova porta nel firewall.
    sudo ufw allow 2200/tcp
    

4.4 Limitare l’accesso SSH a indirizzi IP specifici

Per migliorare la sicurezza, è possibile limitare l’accesso SSH a indirizzi IP specifici.

4.4.1 Configurazione di /etc/hosts.allow

Consenti l’accesso SSH solo da determinati indirizzi IP modificando:

sudo nano /etc/hosts.allow

Aggiungi la seguente riga (sostituisci 192.168.1.100 con l’indirizzo IP consentito):

sshd: 192.168.1.100

4.4.2 Configurazione di /etc/hosts.deny

Per bloccare tutti gli altri IP per impostazione predefinita:

sudo nano /etc/hosts.deny
sshd: ALL

Ciò garantisce che solo gli IP elencati in hosts.allow possano accedere a SSH.

Riepilogo

Questa sezione ha trattato impostazioni SSH avanzate, includendo:

  • Gestione di ssh.socket in Ubuntu 22.10 e successive
  • Utilizzo del tunneling SSH (port forwarding) per connessioni sicure
  • Ascolto su più porte SSH
  • Limitare l’accesso SSH a IP specifici

Applicare queste impostazioni migliora la sicurezza e l’usabilità di SSH.

5. Risoluzione dei problemi SSH

Anche con una configurazione corretta, possono verificarsi problemi SSH. Questa sezione fornisce soluzioni ai problemi SSH più comuni.

5.1 Impossibile connettersi a SSH

Se ricevi un errore Connection refused o di timeout, verifica quanto segue.

5.1.1 Il servizio SSH non è in esecuzione

Verifica lo stato del servizio SSH:

sudo systemctl status ssh

Soluzione:

  • Se Active: inactive (dead) o failed, riavvia SSH.
    sudo systemctl restart ssh
    
  • Abilita l’avvio automatico di SSH.
    sudo systemctl enable ssh
    

5.1.2 Il firewall blocca SSH

Assicurati che SSH sia consentito tramite UFW:

sudo ufw status

Soluzione: Se SSH non è consentito:

sudo ufw allow 22/tcp

Se utilizzi una porta personalizzata:

sudo ufw allow 2200/tcp

5.2 Errori di autenticazione

Se SSH rifiuta i tentativi di accesso, verifica quanto segue:

5.2.1 Nome utente o password errati

Assicurati di utilizzare il nome utente corretto:

ssh username@server-ip-address

5.2.2 Problemi con l’autenticazione a chiave pubblica

Verifica che la tua chiave pubblica sia correttamente memorizzata in ~/.ssh/authorized_keys.

cat ~/.ssh/authorized_keys

5.2.3 Permessi errati

Assicurati che la directory e i file SSH abbiano i permessi corretti:

chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys

Riepilogo

Questa sezione ha trattato i problemi SSH comuni e le loro soluzioni, includendo:

  • Verifica se SSH è in esecuzione
  • Assicurarsi che il firewall non blocchi SSH
  • Risoluzione dei problemi di autenticazione

Utilizza questi passaggi di risoluzione per risolvere rapidamente i problemi di connessione SSH.

6. FAQ (Domande Frequenti)

Questa sezione affronta le domande comuni relative a SSH e le soluzioni per migliorare la tua esperienza SSH mantenendo la sicurezza.

6.1 Come prevenire i timeout SSH?

Se le connessioni SSH si disconnettono dopo un periodo di inattività, prova le seguenti impostazioni.

6.1.1 Configurazione lato server

Modifica /etc/ssh/sshd_config e aggiungi:

ClientAliveInterval 60
ClientAliveCountMax 3

Riavvia SSH per applicare le modifiche:

sudo systemctl restart ssh

6.1.2 Configurazione lato client

Modifica il file di configurazione SSH locale ~/.ssh/config:

Host *
    ServerAliveInterval 60
    ServerAliveCountMax 3

6.2 Cosa fare se dimentico la password SSH?

6.2.1 Se hai accesso fisico al server

  1. Avvia in modalità di ripristino tramite il menu GRUB.
  2. Reimposta la password con il seguente comando:
    passwd username
    
  1. Riavvia il sistema.

6.2.2 Se non puoi accedere fisicamente al server (es. VPS cloud)

  • Usa la console fornita dal provider cloud per accedere al server.
  • Configura l’autenticazione a chiave SSH invece di fare affidamento sulle password.

6.3 Come usare SSH su Windows?

6.3.1 Uso di PowerShell

Windows 10 e versioni successive includono un client SSH integrato. Apri PowerShell ed esegui:

ssh username@server-ip-address

6.3.2 Uso di PuTTY

  1. Scarica e installa PuTTY .
  2. Inserisci l’IP del server in Host Name (or IP address) .
  3. Seleziona SSH come tipo di connessione e fai clic su Open .
  4. Accedi con il tuo nome utente e password.

6.4 Come configurare SSH in Ubuntu WSL (Windows Subsystem for Linux)?

Per abilitare SSH su WSL, segui questi passaggi.

6.4.1 Installazione del server SSH

sudo apt update && sudo apt install openssh-server

6.4.2 Configurazione di SSH

Modifica /etc/ssh/sshd_config e abilita l’autenticazione con password:

PasswordAuthentication yes

Poiché WSL non utilizza systemd per impostazione predefinita, avvia SSH manualmente:

sudo service ssh start

6.5 Quali misure di sicurezza aggiuntive dovrei adottare?

6.5.1 Installazione di Fail2Ban

Previeni gli attacchi brute‑force installando Fail2Ban:

sudo apt install fail2ban -y

Modifica il file di configurazione /etc/fail2ban/jail.local:

[sshd]
enabled = true
port = 22
maxretry = 3
findtime = 600
bantime = 3600

Riavvia Fail2Ban:

sudo systemctl restart fail2ban

6.5.2 Modifica della porta SSH

Modifica /etc/ssh/sshd_config per cambiare la porta SSH predefinita:

Port 2200

Riavvia SSH e aggiorna le impostazioni del firewall:

sudo ufw allow 2200/tcp

6.6 Come monitorare i log SSH in tempo reale?

Per visualizzare i log SSH in tempo reale, usa:

sudo journalctl -u ssh -f

Per controllare i log precedenti:

sudo cat /var/log/auth.log | grep ssh

6.7 Come rendere SSH più comodo?

6.7.1 Utilizzare .ssh/config per un accesso facile

Salva le connessioni SSH usate frequentemente in ~/.ssh/config:

Host myserver
    HostName 192.168.1.100
    User user
    Port 2200
    IdentityFile ~/.ssh/id_rsa

Ora puoi connetterti con:

ssh myserver

6.7.2 Utilizzare ssh-agent per evitare l’inserimento ripetuto della password

Esegui:

eval $(ssh-agent -s)
ssh-add ~/.ssh/id_rsa

Questo consente connessioni SSH senza inserire la passphrase ogni volta.

Riepilogo

Questa sezione ha fornito risposte alle domande più comuni su SSH, coprendo:

  • Prevenire i timeout SSH
  • Recuperare da una password dimenticata
  • Usare SSH su Windows e WSL
  • Applicare misure di sicurezza aggiuntive
  • Monitorare i log SSH
  • Rendere l’uso di SSH più comodo

Seguendo questi consigli, puoi creare un ambiente SSH sicuro ed efficiente per la gestione remota dei server.

Articoli correlati

Related

1. Introduzione Utilizzando SSH su Ubuntu, è possibile accedere e gestire in modo sicuro il proprio server o PC da remot[…]

年収訴求