Il concetto di bastion host non è una novità per l'informatica. Gli host Baston sono in genere sistemi rinforzati rivolti al pubblico che fungono da punto di accesso ai sistemi dietro un firewall o un'altra posizione riservata e sono particolarmente apprezzati con l'ascesa del cloud computing.
Il ssh
command offre un modo semplice per utilizzare bastion host per connettersi a un host remoto con un singolo comando. Invece di inviare prima SSH all'host bastion e quindi utilizzare ssh
sul bastione per connettersi all'host remoto, ssh
può creare autonomamente la prima e la seconda connessione utilizzando ProxyJump
.
ProxyJump
Il ProxyJump
o il -J
flag, è stato introdotto in ssh
versione 7.3. Per usarlo, specifica il bastion host attraverso il quale connetterti dopo il -J
flag, più l'host remoto:
$ ssh -J <bastion-host> <remote-host>
Puoi anche impostare nomi utente e porte specifici se differiscono tra gli host:
$ ssh -J user@<bastion:port> <user@remote:port>
Il ssh
pagina man (o manuale) (man ssh
) rileva che è possibile specificare più nomi host separati da virgole per passare da una serie di host:
$ ssh -J <bastion1>,<bastion2> <remote>
Questa funzione è utile se sono presenti più livelli di separazione tra un bastione e l'host remoto finale. Ad esempio, un host bastion pubblico che dà accesso a un set di host di "livello web", all'interno del quale è possibile accedere a un ulteriore gruppo protetto di "livello di database".
Host proxy hard-coding in ~/.ssh/config
Il -J
flag fornisce flessibilità per specificare facilmente proxy e host remoti secondo necessità, ma se un host bastion specifico viene utilizzato regolarmente per connettersi a un host remoto specifico, il ProxyJump
la configurazione può essere impostata in ~/.ssh/config
per effettuare automaticamente la connessione al bastione in rotta verso l'host remoto:
### The Bastion Host
Host bastion-host-nickname
HostName bastion-hostname
### The Remote Host
Host remote-host-nickname
HostName remote-hostname
ProxyJump bastion-host-nickname
Utilizzando la configurazione di esempio sopra, quando un ssh
la connessione avviene in questo modo:
$ ssh remote-host-nickname
Il ssh
Il comando prima crea una connessione al bastion host bastion-hostname
(l'host a cui si fa riferimento, per nickname, nel ProxyJump
dell'host remoto impostazioni) prima di connettersi all'host remoto.
Un'alternativa:inoltro stdin e stdout
ProxyJump
è il modo semplificato per utilizzare una funzione che ssh
ha avuto per molto tempo: ProxyCommand
. ProxyCommand
funziona inoltrando standard in (stdin) e standard out (stdout) dalla macchina remota tramite proxy o bastion host.
Il ProxyCommand
stesso è un comando specifico utilizzato per connettersi a un server remoto:nel caso dell'esempio precedente, sarebbe il manuale ssh
comando utilizzato per la prima connessione al bastione:
$ ssh -o ProxyCommand="ssh -W %h:%p bastion-host" remote-host
Il %h:%p
argomenti al -W
flag sopra specificare di inoltrare lo standard in entrata e in uscita all'host remoto (%h
) e la porta dell'host remoto (%p
).
ProxyCommand
in ~/.ssh/config
Come con ProxyJump
, ProxyCommand
può essere impostato in ~/.ssh/config
file per gli host che utilizzano sempre questa configurazione:
Host remote-host
ProxyCommand ssh bastion-host -W %h:%p
Con questa impostazione in ~/.ssh/config
, qualsiasi ssh
la connessione all'host remoto viene eseguita inoltrando stdin e stdout tramite una connessione protetta da bastion-host
.
Il ssh
il comando è uno strumento potente. Sebbene possa essere utilizzato principalmente nella sua forma più semplice, ssh user@hostname
, ci sono letteralmente dozzine di usi, con flag e configurazioni per effettuare connessioni da un host all'altro. Dai un'occhiata a ssh
la pagina di manuale di (man ssh
) qualche volta per scoprire tutte le diverse opzioni disponibili con questo programma apparentemente semplice.