Se ti connetti regolarmente a più sistemi remoti tramite SSH, 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, c'è un'altra soluzione, molto migliore e più semplice a questo problema. OpenSSH ti consente di impostare un file di configurazione per utente in cui puoi memorizzare diverse opzioni SSH per ogni macchina remota a cui ti connetti.
Questo articolo illustra le nozioni di base 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 un client OpenSSH installato.
Posizione del file di configurazione SSH #
Il file di configurazione lato client OpenSSH è denominato config
, ed è memorizzato nel .ssh
directory nella directory home dell'utente.
Il ~/.ssh
viene creata automaticamente quando l'utente esegue ssh
comando per la prima volta. Se la directory non esiste sul tuo sistema, creala usando il comando seguente:
mkdir -p ~/.ssh && chmod 700 ~/.ssh
Per impostazione predefinita, il file di configurazione SSH potrebbe non esistere, quindi potrebbe essere necessario crearlo utilizzando il touch
comando:
touch ~/.ssh/config
Questo file deve essere leggibile e scrivibile solo dall'utente e non accessibile da altri:
chmod 600 ~/.ssh/config
Struttura e modelli del 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 l'Host
direttiva e contiene opzioni SSH specifiche utilizzate quando si stabilisce una connessione con il server SSH remoto.
L'indentazione non è richiesta ma è consigliata in quanto rende il file più facile da leggere.
L'Host
la direttiva può contenere un pattern o un elenco di pattern separati da spazi bianchi. Ciascun modello può contenere zero o più caratteri diversi da spazi o uno dei seguenti identificatori di modello:
*
- Corrisponde a zero o più caratteri. Ad esempio,Host *
corrisponde a tutti gli host, mentre192.168.0.*
corrisponde agli host nel192.168.0.0/24
sottorete.?
- Corrisponde esattamente a un carattere. Il modello,Host 10.10.0.?
corrisponde a tutti gli host in10.10.0.[0-9]
intervallo.!
- Se utilizzato all'inizio di un pattern, nega la corrispondenza. Ad esempio,Host 10.10.0.* !10.10.0.5
corrisponde a qualsiasi host nel10.10.0.0/24
sottorete eccetto10.10.0.5
.
Il client SSH legge il file di configurazione stanza per stanza e, se più di un pattern corrisponde, le opzioni della prima stanza corrispondente hanno la precedenza. Pertanto dovrebbero essere fornite più dichiarazioni specifiche per l'host all'inizio del file e sostituzioni più generali alla fine del file.
Puoi trovare un elenco completo delle opzioni ssh disponibili digitando man ssh_config
nel tuo terminale o visitando la pagina man di ssh_config.
Il file di configurazione SSH viene letto anche da altri programmi come scp
, sftp
e rsync
.
Esempio di file di configurazione SSH #
Ora che abbiamo trattato le basi del file di configurazione SSH, diamo un'occhiata al seguente esempio.
In genere, quando ci si connette a un server remoto tramite SSH, è necessario specificare il nome utente, il nome host e la porta remoti. Ad esempio, per accedere come utente denominato john
a un host chiamato dev.example.com
sulla porta 2322
dalla riga di comando, dovresti digitare:
ssh [email protected] -p 2322
Per connettersi al server utilizzando le stesse opzioni fornite nel comando precedente, è sufficiente digitare ssh dev
, inserisci le seguenti righe nel tuo "~/.ssh/config
file:
Host dev
HostName dev.example.com
User john
Port 2322
Ora quando digiti ssh dev
, il client ssh leggerà il file di configurazione e utilizzerà i dettagli di connessione specificati per dev
ospite:
ssh 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
-
Quando digiti
ssh targaryen
, il client ssh legge il file e applica le opzioni dalla prima corrispondenza, che èHost targaryen
. Quindi controlla le stanze successive una per una per uno schema corrispondente. Il prossimo corrispondente èHost * !martell
(che significa tutti gli host trannemartell
), e applicherà l'opzione di connessione da questa stanza. L'ultima definizioneHost *
corrisponde anche, ma il client ssh prenderà solo laCompression
opzione perché l'User
l'opzione è già definita nelHost targaryen
strofa.L'elenco completo delle opzioni utilizzate quando si digita
ssh targaryen
è il seguente:HostName 192.168.1.10 User daenerys Port 7654 IdentityFile ~/.ssh/targaryen.key LogLevel INFO Compression yes
-
Durante l'esecuzione di
ssh tyrell
i modelli host corrispondenti sono:Host tyrell
,Host *ell
,Host * !martell
eHost *
. Le opzioni utilizzate in questo caso sono:HostName 192.168.10.20 User oberyn LogLevel INFO Compression yes
-
Se esegui
ssh martell
, i modelli di host corrispondenti sono:Host martell
,Host *ell
eHost *
. Le opzioni utilizzate in questo caso sono:HostName 192.168.10.50 User oberyn Compression yes
-
Per tutte le altre connessioni, il client ssh utilizzerà le opzioni specificate in
Host * !martell
eHost *
sezioni.
Sostituisci l'opzione del file di configurazione SSH #
Il client ssh legge la sua configurazione nel seguente ordine di precedenza:
- Opzioni specificate dalla riga di comando.
- Opzioni definite nel
~/.ssh/config
. - Opzioni definite in
/etc/ssh/ssh_config
.
Se vuoi sovrascrivere una singola opzione, puoi specificarla sulla riga di comando. Ad esempio, se hai la seguente definizione:
Host dev
HostName dev.example.com
User john
Port 2322
e vuoi usare tutte le altre opzioni tranne per connetterti come utente root
invece di john
è sufficiente specificare l'utente sulla riga di comando:
ssh -o "User=root" dev
Il -F
(configfile
) consente di specificare un file di configurazione per utente alternativo.
Per dire a ssh
client per ignorare tutte le opzioni specificate nel file di configurazione ssh, utilizzare:
ssh -F /dev/null [email protected]
Conclusione #
Ti abbiamo mostrato come configurare il file di configurazione ssh dell'utente. Potresti anche voler configurare un'autenticazione basata su chiave SSH e connetterti ai tuoi server Linux senza inserire una password.
Per impostazione predefinita, SSH è in ascolto sulla porta 22. La modifica del porta SSH predefinito aggiunge un ulteriore livello di sicurezza al tuo server riducendo il rischio di attacchi automatici.
Se hai domande, lascia un commento qui sotto.