Utilizzare SSH su Ubuntu! Guida completa a connessione, cambio porta e autenticazione con chiave pubblica

目次

1. Introduzione

Utilizzando SSH su Ubuntu, è possibile accedere e gestire in modo sicuro il proprio server o PC da remoto. Questa guida spiega tutto, dalle basi di SSH all’installazione di un server SSH su Ubuntu, misure di sicurezza e risoluzione dei problemi. È progettata per essere amichevole per i principianti e facile da capire.

Cos’è SSH?

SSH (Secure Shell) è un protocollo che consente connessioni remote sicure su una rete. A differenza di Telnet o FTP tradizionali, SSH crittografa i dati per ridurre significativamente il rischio di intercettazione e manomissione.

Principali Casi d’Uso di SSH su Ubuntu

SSH è comunemente utilizzato su Ubuntu per i seguenti scopi:

  • Gestione Remota del Server : Operare un server Ubuntu da una posizione remota.
  • Trasferimento di File : Trasferire file in modo sicuro utilizzando SCP o SFTP.
  • Inoltro di Porta : Stabilire una connessione remota sicura.

Cosa Imparerai in Questa Guida

  • Concetti di base e funzionamento di SSH
  • Come installare un server SSH su Ubuntu
  • Impostazioni di connessione SSH e risoluzione dei problemi
  • Misure di sicurezza per SSH
侍エンジニア塾

2. Concetti Base di SSH

Per utilizzare SSH in modo efficace, è importante comprendere i suoi concetti base. Questa sezione spiega come funziona SSH e i diversi metodi di autenticazione.

Come Funziona SSH

SSH è un protocollo che stabilisce una connessione sicura tra un client e un server. Di default, utilizza la porta TCP 22 per la comunicazione crittografata.

Principali Caratteristiche

  • Accesso Remoto : Eseguire comandi su un server.
  • Trasferimento di File : Inviare dati in modo sicuro utilizzando SCP o SFTP.
  • Inoltro di Porta : Connettersi ad altri servizi tramite SSH.

Metodi di Autenticazione SSH

SSH supporta principalmente due metodi di autenticazione:

Autenticazione con Password

  • Accesso utilizzando nome utente e password.
  • Facile da usare ma vulnerabile ad attacchi brute force.

Autenticazione con Chiave Pubblica

  • Autenticazione utilizzando una coppia di chiavi pubblica e privata.
  • Più sicura e raccomandata rispetto all’autenticazione con password.

Vantaggi di SSH

  • Crittografia dei Dati : Protegge la comunicazione dall’intercettazione.
  • Gestione Remota Facile : Accessibile da qualsiasi luogo.
  • Sicurezza Migliorata : Aiuta a prevenire accessi non autorizzati.

3. Installazione di un Server SSH su Ubuntu

Per utilizzare SSH su Ubuntu, è necessario installare il server OpenSSH. Questa sezione spiega i passaggi di installazione e la configurazione base.

Installazione del Server OpenSSH

È possibile installare il server OpenSSH su Ubuntu con il seguente comando:

sudo apt update
sudo apt install openssh-server

Dopo l’installazione, verifica se il servizio SSH è in esecuzione:

sudo systemctl status ssh

Avvio e Controllo del Servizio SSH

Per avviare o arrestare manualmente il servizio SSH, utilizzare i seguenti comandi:

# Start SSH
sudo systemctl start ssh

# Enable SSH to start automatically on reboot
sudo systemctl enable ssh

# Stop SSH
sudo systemctl stop ssh

Configurazione di UFW (Uncomplicated Firewall)

Se UFW è abilitato di default, le connessioni SSH potrebbero essere bloccate. Consenti l’accesso SSH eseguendo:

sudo ufw allow ssh
sudo ufw enable

4. Configurazione delle Connessioni SSH

Per utilizzare SSH in modo sicuro, una configurazione adeguata è essenziale. Questa sezione spiega come impostare l’autenticazione con chiave pubblica.

Generazione di una Coppia di Chiavi

Sul lato client, esegui il seguente comando per creare una coppia di chiavi pubblica e privata:

ssh-keygen -t rsa -b 4096

Di default, la chiave privata viene salvata in ~/.ssh/id_rsa, e la chiave pubblica in ~/.ssh/id_rsa.pub.

Copia della Chiave Pubblica sul Server

Trasferisci la chiave pubblica generata sul server SSH:

ssh-copy-id username@server-ip

In alternativa, copia manualmente la chiave utilizzando SCP:

scp ~/.ssh/id_rsa.pub username@server-ip:~/

Sul server, sposta la chiave pubblica nella directory corretta:

mkdir -p ~/.ssh
cat ~/id_rsa.pub >> ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys
rm ~/id_rsa.pub

Modifica del File sshd_config

Migliora la sicurezza modificando il file di configurazione SSH:

sudo nano /etc/ssh/sshd_config

Aggiorna le seguenti impostazioni:

# Disable password authentication (enable public key authentication only)
PasswordAuthentication no

# Disable root login
PermitRootLogin no

# Change the default SSH port (example: 2222)
Port 2222

Dopo aver apportato le modifiche, riavvia il servizio SSH:

sudo systemctl restart ssh

5. Connessione a un Server SSH

Una volta configurato il server SSH, devi connetterti ad esso da una macchina client. Questa sezione spiega i metodi di connessione SSH di base e la gestione delle modifiche di porta.

Comando di Connessione SSH di Base

Per connetterti a un server SSH da un client, usa:

ssh username@server-ip

Ad esempio, se l’IP del server è 192.168.1.10 e il nome utente è ubuntu, inserisci:

ssh ubuntu@192.168.1.10

Alla prima connessione, vedrai un prompt di verifica dell’impronta digitale. Digita “yes” per accettare e continuare.

Connessione con una Porta Personalizzata

Se la porta predefinita (22) è stata modificata, specifica la porta usando l’opzione -p:

ssh -p 2222 ubuntu@192.168.1.10

Connessione con una Chiave Privata

Se usi l’autenticazione con chiave pubblica, specifica la chiave privata con l’opzione -i:

ssh -i ~/.ssh/id_rsa ubuntu@192.168.1.10

Esecuzione di Comandi Remoti via SSH

Puoi eseguire comandi remoti senza accedere interattivamente al server:

ssh ubuntu@192.168.1.10 "ls -lah /home/ubuntu"

Questo è utile per l’automazione e la gestione remota.

Trasferimento di File con SCP

Usa SSH per trasferire file tra un PC locale e un server remoto.

Da Locale a Remoto

scp filename username@server-ip:/remote/directory

Esempio:

scp myfile.txt ubuntu@192.168.1.10:/home/ubuntu/

Da Remoto a Locale

scp username@server-ip:/remote/file ./local/directory

Esempio:

scp ubuntu@192.168.1.10:/home/ubuntu/myfile.txt ./

Gestione di File con SFTP

Usa SFTP per la gestione di file su SSH:

sftp ubuntu@192.168.1.10

Una volta connesso, puoi usare comandi come:

ls        # List files
cd        # Change directory
put file  # Upload file from local to remote
get file  # Download file from remote to local
exit      # Exit SFTP session

6. Risoluzione dei Problemi di Connessione SSH

I problemi di connessione SSH sono comuni. Questa sezione copre i problemi tipici e le loro soluzioni.

Errori Comuni di Connessione SSH e Soluzioni

Se la connessione SSH fallisce, considera le seguenti cause:

1. Il Server SSH Non È in Esecuzione

Controlla se il server SSH è attivo:

sudo systemctl status ssh

Soluzione:

  • Se il server non è in esecuzione, avvialo con:
sudo systemctl start ssh
  • Assicurati che SSH si avvii automaticamente al riavvio:
sudo systemctl enable ssh

2. Firewall (UFW) Sta Bloccando SSH

Se UFW (Uncomplicated Firewall) è abilitato, potrebbe bloccare l’accesso SSH.

Soluzione:

  • Controlla le impostazioni correnti di UFW:
sudo ufw status
  • Consenti connessioni SSH:
sudo ufw allow ssh

(Se usi una porta personalizzata, esegui sudo ufw allow <port>)

  • Riavvia UFW:
sudo ufw reload

3. Il Numero di Porta SSH È Cambiato

Se SSH è in esecuzione su una porta diversa, assicurati di specificare la porta corretta durante la connessione.

Soluzione:

  • Verifica la porta SSH configurata:
sudo grep Port /etc/ssh/sshd_config
  • Usa la porta corretta durante la connessione:
ssh -p 2222 username@server-ip

4. Permessi Incorrect per le Chiavi SSH

Permessi errati per i file delle chiavi SSH possono causare fallimenti di autenticazione.

Soluzione:

  • Assicurati che la chiave privata abbia i permessi corretti:
chmod 600 ~/.ssh/id_rsa
  • Assicurati che il file delle chiavi autorizzate sia impostato correttamente:
chmod 644 ~/.ssh/authorized_keys

5. Controllo dei Log SSH

Per diagnosticare problemi SSH, controlla i log:

sudo journalctl -u ssh --no-pager | tail -n 20

Per il monitoraggio dei log in tempo reale:

sudo tail -f /var/log/auth.log

7. Migliorare la Sicurezza SSH

SSH è uno strumento potente per l’accesso remoto, ma senza adeguate misure di sicurezza, può diventare un bersaglio per accessi non autorizzati e attacchi brute-force. Questa sezione spiega le configurazioni consigliate per migliorare la sicurezza SSH.

1. Disabilita l’Autenticazione con Password e Usa l’Autenticazione con Chiave Pubblica

Per impostazione predefinita, SSH consente l’autenticazione con password, che aumenta il rischio di attacchi brute-force. Passare all’autenticazione con chiave pubblica migliora la sicurezza.

Passi

  1. Modifica il file sshd_config:
sudo nano /etc/ssh/sshd_config
  1. Modifica (o aggiungi) le seguenti impostazioni:
PasswordAuthentication no
PubkeyAuthentication yes
  1. Riavvia il servizio SSH:
sudo systemctl restart ssh

Questo garantisce che SSH accetti l’autenticazione solo tramite chiavi pubbliche. Assicurati di configurare l’autenticazione con chiave pubblica prima di applicare questa modifica.

2. Cambia la Porta SSH Predefinita

L’uso della porta SSH predefinita (22) la rende un bersaglio facile per gli attacchi. Cambiare la porta migliora la sicurezza.

Passi

  1. Apri il file sshd_config:
sudo nano /etc/ssh/sshd_config
  1. Modifica il numero della porta (ad esempio, cambiala in 2222):
Port 2222
  1. Consenti la nuova porta attraverso il firewall:
sudo ufw allow 2222/tcp
  1. Riavvia il servizio SSH:
sudo systemctl restart ssh
  1. Testa la nuova porta:
ssh -p 2222 username@server-ip

3. Disabilita l’Accesso come Root

Per impostazione predefinita, l’utente root può accedere via SSH, il che rappresenta un rischio per la sicurezza. Si consiglia di consentire la connessione solo a utenti specifici.

Passi

  1. Apri il file sshd_config:
sudo nano /etc/ssh/sshd_config
  1. Modifica l’impostazione seguente:
PermitRootLogin no
  1. Riavvia il servizio SSH:
sudo systemctl restart ssh

4. Previeni gli Attacchi Brute-Force con Fail2Ban

Fail2Ban monitora i tentativi di accesso e blocca gli indirizzi IP dopo più tentativi di autenticazione falliti.

Installazione e Configurazione

  1. Installa Fail2Ban:
sudo apt install fail2ban -y
  1. Copia il file di configurazione predefinito:
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
  1. Modifica jail.local :
sudo nano /etc/fail2ban/jail.local
  1. Modifica le impostazioni sotto [sshd] :
[sshd]
enabled = true
maxretry = 5
bantime = 600
findtime = 600
  • maxretry : Numero massimo di tentativi di accesso consentiti.
  • bantime : Tempo (in secondi) per cui un IP verrà bloccato.
  • findtime : Finestra temporale (in secondi) per contare i tentativi falliti.
  1. Riavvia Fail2Ban:
sudo systemctl restart fail2ban
  1. Controlla lo stato di Fail2Ban:
sudo fail2ban-client status sshd

8. Domande Frequenti (FAQ)

Questa sezione affronta domande e problemi comuni quando si usa SSH.

Q1: Perché la connessione SSH viene rifiutata?

Possibili cause:

  • Il servizio SSH non è in esecuzione → Controlla con sudo systemctl status ssh
  • Il firewall sta bloccando SSH → Consenti SSH con sudo ufw allow ssh
  • Uso di una porta personalizzata → Connettiti usando ssh -p <port> username@server-ip

Q2: Come cambiare la porta SSH predefinita?

Modifica il file sshd_config:

sudo nano /etc/ssh/sshd_config

Cambia la porta:

Port 2222

Quindi riavvia SSH:

sudo systemctl restart ssh

Q3: Come abilitare l’accesso SSH solo per IP specifici?

Modifica le impostazioni del firewall:

sudo ufw allow from 192.168.1.100 to any port 22

O usa sshd_config:

AllowUsers username@192.168.1.100

9. Conclusione

Questa guida ha coperto tutto, dalle basi di SSH alle migliorie di sicurezza. Ecco i punti chiave:

  • Usa l’autenticazione con chiave pubblica invece delle password.
  • Cambia la porta SSH predefinita per una migliore sicurezza.
  • Disabilita l’accesso come root per prevenire accessi non autorizzati.
  • Usa Fail2Ban per bloccare gli attacchi brute-force.
  • Monitora i log SSH per la risoluzione dei problemi.

Risorse Aggiuntive

Seguendo queste migliori pratiche, puoi mantenere un ambiente SSH sicuro ed efficiente. 🚀