Come generare e mettere in sicurezza le chiavi SSH per l'accesso remoto

Padroneggia l'accesso remoto sicuro imparando a generare robuste coppie di chiavi SSH utilizzando `ssh-keygen`. Questa guida tratta le migliori pratiche per la selezione dei tipi di chiave (Ed25519), la messa in sicurezza della tua chiave privata con una passphrase, il dispiegamento efficiente della chiave pubblica tramite `ssh-copy-id` e l'utilizzo di `ssh-agent` per un'autenticazione senza interruzioni. Assicurati che la tua infrastruttura sia protetta dagli attacchi di forza bruta implementando il controllo degli accessi basato su chiavi.

35 visualizzazioni

Come Generare e Proteggere le Chiavi SSH per l'Accesso Remoto

Secure Shell (SSH) è il protocollo standard per connettersi in modo sicuro a server e sistemi remoti. Sebbene l'autenticazione tramite password sia comune, l'uso delle coppie di chiavi SSH offre un metodo di autenticazione significativamente più forte, più conveniente e più resiliente. Questa guida completa ti illustra come generare coppie di chiavi SSH robuste, proteggerle con passphrase e utilizzare l'ssh-agent per un accesso remoto sicuro e senza interruzioni.

Comprendere la gestione delle chiavi è fondamentale per mantenere la sicurezza della tua infrastruttura. Sostituendo le password vulnerabili con chiavi crittografiche, si mitigano i rischi associati agli attacchi di forza bruta e al credential stuffing, stabilendo una base solida per una connettività remota sicura.

Comprendere le Coppie di Chiavi SSH

Una coppia di chiavi SSH è composta da due componenti distinti:

  1. La Chiave Privata: Questa chiave non deve essere mai condivisa. Rimane in modo sicuro sulla tua macchina locale e viene utilizzata per provare la tua identità al server remoto.
  2. La Chiave Pubblica: Questa chiave viene liberamente condivisa e caricata nel file ~/.ssh/authorized_keys sul server o sui server remoti a cui desideri accedere. Il server utilizza questa chiave per verificare la firma generata dalla tua chiave privata.

Scegliere l'Algoritmo Corretto

Quando si generano le chiavi, è essenziale selezionare un algoritmo crittografico moderno e robusto. RSA è ancora ampiamente utilizzato, ma Ed25519 è spesso raccomandato per la sua velocità e le forti garanzie di sicurezza.

Passo 1: Generazione della Coppia di Chiavi SSH

L'utility ssh-keygen è lo strumento standard per la creazione di coppie di chiavi SSH su Linux, macOS e Windows (tramite Git Bash o WSL).

Generazione di una Chiave Ed25519 (Raccomandata)

Per creare una chiave Ed25519 moderna, usa il seguente comando. Specifichiamo il tipo di chiave (-t ed25519) e forniamo un commento (-C) per aiutare a identificare lo scopo o il proprietario della chiave:

ssh-keygen -t ed25519 -C "[email protected]_or_host_name"

Quando richiesto:

  1. Enter file in which to save the key (Inserisci il file in cui salvare la chiave): Premi Invio per accettare il percorso predefinito (/home/user/.ssh/id_ed25519).
  2. Enter passphrase (recommended) (Inserisci la passphrase, raccomandato): Imposta sempre una passphrase forte. Questa crittografa la tua chiave privata, in modo che anche se qualcuno ruba il file, non possa utilizzarlo senza la passphrase.

Generazione di una Chiave RSA (Alternativa)

Se è richiesta la compatibilità con sistemi molto datati, puoi generare una chiave RSA, assicurandoti di specificare una lunghezza di chiave sufficiente (almeno 4096 bit):

ssh-keygen -t rsa -b 4096 -C "your_rsa_key_comment"

File di Output delle Chiavi

Dopo la generazione, vengono creati due file nella tua directory ~/.ssh/ (assumendo le impostazioni predefinite):

  • id_ed25519 (o id_rsa): La Tua Chiave Privata
  • id_ed25519.pub (o id_rsa.pub): La Tua Chiave Pubblica

Migliore Pratica di Sicurezza: Non condividere mai il file senza l'estensione .pub. Imposta permessi restrittivi sulla tua chiave privata (chmod 600 ~/.ssh/id_ed25519).

Passo 2: Copiare la Chiave Pubblica sul Server

Il server remoto deve avere la tua chiave pubblica nel suo file ~/.ssh/authorized_keys per consentire l'accesso.

Utilizzo di ssh-copy-id (Il Metodo Più Semplice)

L'utility ssh-copy-id automatizza il processo, gestendo la creazione delle directory e le impostazioni dei permessi sul server remoto. Dovrai autenticarti con una password un'ultima volta per questa configurazione iniziale.

ssh-copy-id user@remote_host_ip

In caso di successo, il comando ti informerà che le chiavi sono state aggiunte. Ora puoi tentare di effettuare l'accesso.

Copia Manuale (Se ssh-copy-id non è Disponibile)

Se non puoi usare ssh-copy-id, puoi aggiungere manualmente il contenuto della chiave pubblica. Per prima cosa, visualizza la chiave pubblica:

cat ~/.ssh/id_ed25519.pub

Quindi, accedi al server remoto usando la tua password e aggiungi l'output al file authorized_keys:

# Sul server remoto
mkdir -p ~/.ssh
chmod 700 ~/.ssh
# Sostituisci <PASTE_YOUR_PUBLIC_KEY_HERE> con il contenuto effettivo della chiave
echo "<PASTE_YOUR_PUBLIC_KEY_HERE>" >> ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys

Passo 3: Protezione dell'Accesso con ssh-agent

Digitare la passphrase ogni volta che ti connetti a un server diventa noioso. L'ssh-agent è un programma in background che memorizza in modo sicuro le tue chiavi private decrittografate in memoria, consentendoti di usarle senza inserire ripetutamente la passphrase.

Avvio e Utilizzo di ssh-agent

  1. Assicurati che l'agent sia in esecuzione: Sulla maggior parte dei sistemi Linux/macOS moderni, l'agent si avvia automaticamente all'accesso. Puoi verificarne lo stato cercando le variabili d'ambiente:

    bash echo $SSH_AUTH_SOCK

  2. Aggiungi la tua chiave all'agent: Usa il comando ssh-add per caricare la tua chiave privata. Ti verrà richiesta la passphrase solo una volta.

    ```bash
    ssh-add ~/.ssh/id_ed25519

    Inserisci la passphrase per /home/user/.ssh/id_ed25519: ****

    Identità aggiunta: /home/user/.ssh/id_ed25519 (commento)

    ```

  3. Verifica le chiavi caricate:

    bash ssh-add -l

Ora, quando esegui ssh user@remote_host_ip, la connessione si autenticherà utilizzando la chiave gestita dall'agent senza chiedere nuovamente la passphrase (fino al termine della sessione dell'agent).

Note Importanti su ssh-agent

  • Dipendente dalla Sessione: Le chiavi caricate nell'agent sono in genere disponibili solo per la sessione terminale o la sessione di accesso desktop corrente. Dovrai eseguire nuovamente ssh-add dopo aver effettuato il logout e un nuovo accesso.
  • Durata della Chiave: Puoi impostare una durata massima per le chiavi mantenute nell'agent utilizzando il flag -t (ad esempio, ssh-add -t 1h ~/.ssh/id_ed25519 mantiene la chiave caricata per un'ora).

Sicurezza Avanzata: Disabilitazione dell'Autenticazione tramite Password

Una volta che hai confermato che l'autenticazione basata su chiave funziona perfettamente su tutti i server richiesti, la misura di sicurezza più forte è disabilitare completamente gli accessi basati su password. Ciò previene gli attacchi di forza bruta contro le password.

  1. Connettiti al tuo server via SSH usando la tua chiave.
  2. Modifica il file di configurazione del demone SSH, solitamente situato in /etc/ssh/sshd_config:

    bash sudo nano /etc/ssh/sshd_config

  3. Trova e imposta le seguenti direttive:

    ```config

    Assicurati che sia impostato su yes (solitamente predefinito)

    PubkeyAuthentication yes

    Disabilita gli accessi tramite password

    PasswordAuthentication no
    ```

  4. Riavvia il servizio SSH per applicare le modifiche:

    ```bash
    sudo systemctl restart sshd # Per sistemi basati su systemd (la maggior parte dei Linux moderni)

    OPPURE

    sudo service ssh restart # Sistemi più datati
    ```

Attenzione: Prima di disabilitare l'autenticazione tramite password, assicurati di aver effettuato l'accesso con successo almeno una volta utilizzando la tua nuova chiave. Bloccarsi fuori a causa di un errore di configurazione è un errore comune e recuperabile, ma richiede accesso tramite console o accesso alternativo.

Riepilogo e Passaggi Successivi

Generare e gestire le chiavi SSH è un'abilità fondamentale per l'amministrazione sicura dei sistemi. Seguendo questi passaggi—generando chiavi Ed25519 moderne, proteggendo la chiave privata con una passphrase forte, installando in modo sicuro la chiave pubblica sui server di destinazione e sfruttando l'ssh-agent—stabilirai un meccanismo di autenticazione altamente sicuro ed efficiente.

Passaggi Successivi:

  • Genera una coppia di chiavi unica per ogni sistema o servizio principale a cui accedi.
  • Verifica regolarmente il file authorized_keys sui server critici.
  • Usa passphrase diverse per diverse coppie di chiavi, se possibile, o almeno assicurati che siano complesse.