Tips and tricks: SSH ProxyJump
Pubblicato il 22/07/2017 in Technology • 2 min read
Datemi un accesso SSH e solleverò il mondo!
Come al solito, ci ritroviamo nella situazione in cui non possiamo accedere direttamente via SSH ad un server ma dobbiamo passare per un firewall che - brutto! cattivo! - non è configurato per inoltrare una porta verso il server dove dobbiamo arrivare.
E, come sempre, SSH è il miglior amico del sistemista e ci permette di saltellare da un host all'altro ed accedere al server non esposto su internet.
SSH ha una direttiva molto interessante, che si chiama - come si può
notare dal titolo del post - ProxyJump
che serve proprio al nostro
scopo.
Certo, potremmo far tutto con i tunnel, ma forse con ProxyJump
è tutto
più semplice. Vediamo come!
L'infrastruttura
Ipotizziamo di avere:
- un client connesso a internet
- un firewall con accesso ssh
- il server non esposto su internet
Il firewall è esposto sulla porta 10022, mentre il server ha SSH in ascolto sulla porta 22.
Siamo pronti a saltellare?
L'opzione da usare da riga di comando per saltellare da un host
all'altro è -J
:
user@client:~$ ssh -J fwuser@firewall:10022 admin@server
fwuser@firewall's password:
admin@server's password:`
admin@server:~$
Come è possibile notare, ci vengono chieste due password: la prima per l'accesso al firewall, la seconda è relativa al server.
SSH config file
Se non vogliamo ricordarci tutti i vari salti da effettuare (noi ne abbiamo visto uno, ma magari in infrastrutture complesse possono esserci più host da attraversare), possiamo utilizzare il file di configurazione di SSH.
Ma dov'è questo file? Ogni utente può creare il file .ssh/config
nella
propria home directory; oppure, è possibile effettuare una
configurazione globale modificando il file /etc/ssh/ssh_config
(/usr/local/etc/ssh_config
su FreeBSD).
Data sempre la nostra infrastruttura, vediamo come creare il file di configurazione:
Host external-fw
Hostname firewall
Port 10022
User fwuser
Host internal-server
Hostname server
Port 22
User admin
ProxyJump external-fw
Di seguito la spiegazione delle varie direttive:
Host
indica il nome con cui vengono raggruppate le informazioni di connessione: possiamo scegliere ciò che più ci aggrada, avendo cura di non duplicare i nomiHostname
indica il nome DNS o l'indirizzo IP da raggiungerePort
è la porta a cui effettuare la connessioneUser
è il nome utente per l'autenticazioneProxyJump
indica l'host da attraversare (se più di uno, gli host elencati devono essere separati da virgola): si può scegliere di usare il nome usato nella configurazione di SSH o direttamente l'indirizzo da raggiungere
Con questa configurazione, possiamo semplicemente digitare:
user@client:~$ ssh internal-server fwuser@firewall's password: admin@server's password:
admin@server:~$
per accedere al server non esposto della nostra infrastruttura; chiaramente, ci verranno chieste le password di ogni host da attraversare, a meno di non avere le chiavi SSH per l'autenticazione.
Conclusioni
Abbiamo visto come usare la direttiva ProxyJump
di SSH per accedere a
server non esposti su internet attraverso degli host intermedi.
Al prossimo post!