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, mentre192.168.0.*
corrisponderà a tutti gli host nella sottorete192.168.0.0/24
.?
- corrisponde esattamente a un personaggio. Il modelloHost 10.10.0.?
corrisponderà a tutti gli host nell'intervallo10.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 sottorete10.10.0.0/24
tranne10.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, l'hostname 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
eHost *
.
Sovrascrivere le opzione del file SSH Config
Il client ssh riceve la sua configurazione nel seguente ordine di precedenza:
- Opzioni specificate dalla riga di comando
- Opzioni definite in
~/.ssh/config
- 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.