Come utilizzare SSH ProxyJump e SSH ProxyCommand in Linux
Breve: in questa guida dimostriamo come utilizzare i comandi SSH ProxyJump e SSH ProxyCommand durante la connessione a un jump server.
Nella nostra precedente guida su come configurare un Jump Server SSH, abbiamo trattato il concetto di Bastion Host. Un Bastion host o un Jump Server è un dispositivo intermedio a cui un client SSH si connette prima di accedere al sistema Linux remoto di destinazione. Un server Jump SSH funge da gateway per le tue risorse IT, riducendo così la superficie di attacco.
I comandi SSH ProxyJump e ProxyCommand determinano in che modo un client si connette al server remoto tramite il jump server, il jump host o il bastion server.
Questa guida punta i riflettori su SSH ProxyJump e SSH Proxy Command in Linux.
Connetti Linux remoto usando il comando SSH ProxyJump
Il comando ProxyJump è indicato con il flag -J
. È stato introdotto nella versione 7.3 del server OpenSSH e ti aiuta a stabilire una connessione a un target remoto saltando attraverso un bastion o un jump server.
La sintassi seguente mostra come viene utilizzata questa opzione:
$ ssh -J <jump-server> <remote-target>
Nel caso di più bastion o jump server, la sintassi assume il seguente formato.
$ ssh -J <jump-server-1> <jump-server-2> <remote-target>
In entrambi i casi, accederai come utente root in ogni fase del processo. Questo non è l'ideale per motivi di sicurezza, quindi potresti voler creare utenti diversi in ogni istanza.
È possibile specificare in modo esplicito diversi utenti e porte SSH come mostrato.
$ ssh -J <[email protected]:port> <[email protected]:port>
Per dimostrare il flag ProxyJump in azione, abbiamo una semplice configurazione come mostrato.
Jump Server IP: 173.82.232.55 User: james Remote Target IP: 173.82.227.89 User: tecmint
Per connettersi alla destinazione remota utilizzando il server Jump, il comando avrà il seguente aspetto.
$ ssh -J [email protected] [email protected]
Il comando ti chiederà la password utente del server di salto, quindi seguita dalla password del sistema di destinazione in base alla quale ti verrà concesso l'accesso al sistema di destinazione.

Se usi regolarmente un bastione specifico per connetterti a una destinazione remota specifica, puoi aggiungere la seguente configurazione ProxyJump nel file ~/.ssh/config per rendere la connessione perfetta. Quando ciò accade, verrai autenticato solo una volta e questo accade solo sul target remoto.
Host host-jump User james Hostname 173.82.232.55 Host host_destination User tecmint Hostname 173.82.227.89 Port 22
Utilizzando la configurazione di cui sopra, è possibile effettuare la connessione al target come mostrato.
$ ssh -J host_destination

Connetti Linux remoto utilizzando il comando SSH ProxyCommand
Prima di SSH Proxy Jump, ProxyCommand era l'unico modo per saltare gli host per raggiungere la destinazione remota. Funziona inoltrando lo stdin (standard in) e lo stdout (standard out) dalla destinazione remota attraverso il jump server o bastion.
Il ProxyCommand accetta la sintassi seguente.
$ ssh -o ProxyCommand="ssh -W %h:%p <jump server>" <remote target>
Qui, -W
agli argomenti %h:%p
inoltra lo stdin e out all'host remoto (%h)
e al telecomando porta dell'host (%p)
.
Per mettere in atto il comando, ecco come sarebbe il nostro comando
$ ssh -o ProxyCommand="ssh -W %h:%p 173.82.232.55" 173.82.227.89

Ovviamente, digitare l'intero comando è noioso e richiede tempo. Per evitare di digitare un comando così lungo, aggiungi le seguenti righe di codice al tuo file ~/.ssh/config.
Host host-destination Hostname 173.82.227.89 ProxyCommand ssh -q -W %h:%p host-jump
Salva ed esci.
Ora tutto ciò che devi fare è eseguire il seguente comando per connetterti al server remoto.
$ ssh host-destination
In questa guida, abbiamo dimostrato come funzionano i comandi ProxyJump e ProxyCommand. In generale, ProxyJump si presenta come un'alternativa migliore a ProxyCommand e fornisce un modo più semplice e senza interruzioni per connettersi a una destinazione remota tramite un jump host.