Introduzione

Se ti connetti regolarmente a più sistemi remoti su SSH su base giornaliera, scoprirai che ricordare tutti gli indirizzi IP remoti, nomi utente diversi, porte non standard e varie opzioni della riga di comando è difficile, se non impossibile.

Un'opzione sarebbe quella di creare un alias bash per ogni connessione al server remoto. Tuttavia, esiste un'altra soluzione migliore e più semplice a questo problema. OpenSSH consente di impostare un file di configurazione per utente in cui è possibile memorizzare diverse opzioni SSH per ogni macchina remota a cui ci si connette.

Questa guida illustra le basi del file di configurazione del client SSH e spiega alcune delle opzioni di configurazione più comuni.

Prerequisiti

Supponiamo che tu stia utilizzando un sistema Linux o macOS con il client OpenSSH installato.

Posizione del file di configurazione SSH

Il file di configurazione lato client di OpenSSH è denominato config ed è memorizzato nella directory .ssh nella home directory dell'utente. La directory ~/.ssh viene creata automaticamente quando l'utente esegue il comando ssh per la prima volta.

Se non hai mai usato il comando ssh, dovrai creare la directory usando questo comando:

mkdir -p ~/.ssh && chmod 700 ~/.ssh

Per impostazione predefinita, il file di configurazione SSH potrebbe non esistere, pertanto potrebbe essere necessario crearlo utilizzando il comando touch:

touch ~/.ssh/config

Questo file deve essere leggibile e scrivibile solo dall'utente e non accessibile da altri:

chmod 600 ~/.ssh/config

Struttura e schemi dei file di configurazione SSH

Il file di configurazione SSH ha la seguente struttura:

Host hostname1
    SSH_OPTION value
    SSH_OPTION value

Host hostname2
    SSH_OPTION value

Host *
    SSH_OPTION value

Il contenuto del file di configurazione del client SSH è organizzato in stanze (sezioni). Ogni stanza inizia con la direttiva Host e contiene opzioni SSH specifiche che vengono utilizzate quando si stabilisce una connessione con il server SSH remoto.

L'indentation non è richiesto, ma è consigliato poiché renderà più facile la lettura del file.

La direttiva Host può contenere un modello o un elenco di modelli separato da spazi bianchi. Ogni modello può contenere zero o più caratteri non bianchi o uno dei seguenti identificatori di modello:

  • *- corrisponde a zero o più caratteri. Ad esempio, Host * corrisponderà a tutti gli host, mentre 192.168.0.* corrisponderà a tutti gli host nella sottorete 192.168.0.0/24.
  • ?- corrisponde esattamente a un personaggio. Il modello Host 10.10.0.?corrisponderà a tutti gli host nell'intervallo 10.10.0.[0-9].
  • !- all'inizio di un modello annullerà la sua corrispondenza Ad esempio, Host 10.10.0.* !10.10.0.5 corrisponderà a qualsiasi host nella sottorete 10.10.0.0/24 tranne 10.10.0.5.

Il client SSH legge il file di configurazione in base alla stanza e se più di uno schema corrisponde, le opzioni della prima stanza corrispondente hanno la precedenza. Pertanto, all'inizio del file devono essere fornite più dichiarazioni specifiche dell'host e sostituzioni più generali alla fine del file.

Puoi trovare un elenco completo delle opzioni ssh disponibili digitando man ssh_config:

man ssh_config

Oppure visitando la pagina man ssh_config.

Il file di configurazione SSH viene letto anche da altri programmi come scp, sftp e rsync.

Esempio di file di configurazione SSH di base

Ora che abbiamo coperto la base del file di configurazione SSH, diamo un'occhiata al seguente esempio.

Di solito, quando ci si connette a un server remoto tramite SSH, è necessario specificare il nome utente remoto, il nome host e la porta. Ad esempio, per connettersi come utente denominato alice a un host chiamato dev.example.it sulla porta 2322 dalla riga di comando, digitare:

ssh [email protected] -p 2322

Se preferisci connetterti al server usando le stesse opzioni fornite nel comando sopra semplicemente digitando ssh dev dovrai inserire le seguenti righe nel tuo file ~/.ssh/config, quindi aprire il file:

nano ~/.ssh/config
Host dev
    HostName dev.example.it
    User alice
    Port 2322

Ora se digiti:

ssh dev

il client ssh leggerà il file di configurazione e utilizzerà i dettagli di connessione specificati per l'host dev.

Esempio di file di configurazione SSH condiviso

Questo esempio fornisce informazioni più dettagliate sui modelli host e sulla precedenza delle opzioni.

Prendiamo il seguente file di esempio:

Host targaryen
    HostName 192.168.1.10
    User daenerys
    Port 7654
    IdentityFile ~/.ssh/targaryen.key

Host tyrell
    HostName 192.168.10.20

Host martell
    HostName 192.168.10.50

Host *ell
    user oberyn

Host * !martell
    LogLevel INFO

Host *
    User root
    Compression yes

Se si digita ssh targaryen il client ssh leggerà il file e applicherà le opzioni dalla prima corrispondenza che è Host targaryen. Quindi controllerà le stanze successive una ad una per individuare il modello corrispondente. Il prossimo corrispondente è Host * !martell che significa tutti gli host tranne martell e applicherà l'opzione di connessione da questa stanza. Infine, anche l'ultima definizione Host * è possibile, ma il client ssh prenderà solo l'opzione Compression perché l'opzione User è già definita nella stanza Host targaryen. L'elenco completo delle opzioni utilizzate in questo caso è il seguente:

HostName 192.168.1.10
User daenerys
Port 7654
IdentityFile ~/.ssh/targaryen.key
LogLevel INFO
Compression yes

Quando si esegue ssh tyrell i modelli di accoglienza corrispondenti sono: Host tyrell, Host *ell, Host * !martell e Host *. Le opzioni utilizzate in questo caso sono:

HostName 192.168.10.20
User oberyn
LogLevel INFO
Compression yes

Se si esegue ssh martell i modelli host corrispondente sono: Host martell, Host *ell e Host *. Le opzioni utilizzate in questo caso sono:

HostName 192.168.10.50
User oberyn
Compression yes
  • Per tutte le altre connessioni verranno utilizzate le opzioni specificate nelle sezioni Host * !martell e Host *.

Sovrascrivere le opzione del file SSH Config

Il client ssh riceve la sua configurazione nel seguente ordine di precedenza:

  1. Opzioni specificate dalla riga di comando
  2. Opzioni definite in ~/.ssh/config
  3. Opzioni definite in /etc/ssh/ssh_config

Se si desidera sovrascrivere una singola opzione, è possibile specificarla sulla riga di comando. Ad esempio se hai la seguente definizione:

Host dev
    HostName dev.example.it
    User john
    Port 2322

e si desidera utilizzare tutte le altre opzioni ma connettersi come utente root anziché alice semplicemente specificare l'utente dalla riga di comando:

ssh -o "User=root" dev

L'opzione -F( configfile) consente di specificare un file di configurazione per utente alternativo.

Se vuoi che il tuo client ssh ignori tutte le opzioni specificate nel tuo file di configurazione ssh, puoi usare:

ssh -F /dev/null [email protected]

Conclusione

Hai imparato a configurare il tuo file di configurazione ssh dell'utente. È inoltre possibile configurare un'autenticazione basata su chiave SSH e connettersi ai server Linux senza immettere una password.

Per impostazione predefinita, SSH è in ascolto sulla porta 22. La modifica della porta SSH predefinita aggiunge un ulteriore livello di sicurezza al server riducendo il rischio di attacchi automatici.