SSH attraverso più host utilizzando ProxyCommand?


11

Ho una voce in ~ / .ssh / config sul mio computer a casa che assomiglia a questo:

host foo bar
    ProxyCommand ssh -x -a -q gateway.example.com nc %h 22

dove si gateway.example.comtrova un server al lavoro collegato sia a Internet pubblico che a una rete interna. La casella gateway risolve foo e bar usando le voci in / etc / hosts.

Il mio problema è che devo raggiungere una scatola che si trova dall'altra parte foo. Chiamiamolo "baz". L'host "baz" si trova su un'altra rete privata a cui è collegato foo, ma non quello a cui è collegato "gateway".

Ho provato a usare questo:

host baz
    ProxyCommand ssh -x -a -q gateway/example.com ssh foo nc %h 22

Ma questo non funziona e sono un po 'fuori dalla mia profondità. Come faccio a fare questo?

Non penso che dovrebbe importare, ma lo sto facendo in Ubuntu 10.

Risposte:


13

Facile.

Si supponga che la seguente configurazione di rete:

esempio di configurazione di rete

Dovresti essere in grado di utilizzare un file ~ / .ssh / config che assomigli a questo:

host foo bar
    ProxyCommand ssh -x -a -q gateway.example.com nc %h 22

host baz
    ProxyCommand ssh -x -a -q foo nc %h 22

L'idea qui è che il vostro SSH non sa come raggiungere "foo", quindi uno SSH non avrà successo. E da lì, puoi "nc" fare baz. E se ci sono altri host sulla rete privata interna insieme a "baz", puoi semplicemente aggiungerli alla linea "host baz".

Questo in sostanza tratta l'host "foo" come gateway per "baz", così come "gateway" è il gateway per "foo".

Chiaro?


13

Per quanto riguarda la risposta di ghoti: invece di utilizzare netcat ( "ssh ... nc %h 22"), a partire da OpenSSH 5.4, è possibile farlo direttamente con: "ssh -W %h:22 ...". In questo modo, non devi preoccuparti se netcat è installato nel posto giusto.


1
Ottimo punto, grazie. Questa è una vecchia domanda, ma potrei anche chiarire che mentre stavo eseguendo Ubuntu sulla mia workstation, il "gateway" del server era un vecchio Busybox Linux con OpenSSH 5.3 e i server "foo" e "baz" erano FreeBSD (OpenSSH 5.4). Quindi avrei comunque bisogno di almeno un netcat.
Graham,

@Graham No. È solo il client che deve essere 5.4 o superiore per -Wfunzionare. Si basa sul codice di port forwarding sul lato server, che è molto più vecchio.
Kasperd,

1

Usando le chiavi private memorizzate sul tuo computer locale, inserisci questo comando con le chiavi private, i nomi utente della shell e i nomi host / indirizzi IP modificati in base alle tue esigenze ssh di local-> gateway-> destinazione.

Si noti che ProxyCommand è preferito su Forwarding agente per mitigare il rischio di compromettere l'autenticazione della chiave privata (usando il gateway e la connessione dell'agente ssh locale per compromettere altri host come se il dirottatore avesse la chiave privata) quando un gateway / jumperbox viene dirottato dalla radice.

Comando singolo al proxy SSH su un server (mantenere entrambe le chiavi private sul computer locale):

sudo ssh -i dest_private_key.pem -o "ProxyCommand ssh -W %h:%p -i gate_private_key.pem gate_user@gate_IP" dest_user@dest_IP 

0

Questo è ciò che faccio per uscire dalla rete protetta su Internet.

Sto usando il mio laptop per lavorare con il codice durante la compilazione . Poiché build è limitato dall'accesso a Internet, per clonare un repository da github.com, devo prima passare alla casella degli strumenti , che non ha nemmeno accesso a Internet. Ma può accedere a gw , che ha Internet.

Come questo:

Schema di salto SSH

My .ssh/configon build :

Host gw
  ProxyCommand ssh -A -W %h:%p toolbox

Host github.com
  ProxyCommand ssh -A -W %h:%p gw

Spiegazione.

  1. Il punto di vista è dalla build . Non ci sono configurazioni su altri server.
  2. Innanzitutto, dichiaro che per arrivare a GW è necessario farlo tramite la casella degli strumenti .
  3. In secondo luogo, dichiaro che per accedere a github.com , è necessario farlo tramite gw . Internamente SSH utilizza la regola precedente.
  4. Alla fine, git clone git@github.com:aRepo/Therefunziona e basta!

Chiaro?

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.