În principiu cerințele sunt:
- ServerB trebuie să fie accesibil doar de la ServerA. Nu te conectezi direct la el.
- ServerA trebuie să aibă TCP Tunneling activat.
- ServerA trebuie să fie accesibil de la dvs.
Configurați conexiunea la ServerB printr-un jumphost (în .ssh/config
):
Server gazdăB
Server ProxyJumpA
Aceasta presupune că dacă intri ssh ServerA
, vei ajunge pe ServerA, iar dacă tu, în timp ce ești la ServerA, intri ssh ServerB
, vei ajunge pe ServerB. De exemplu. numele „ServerB” ar trebui să fie rezolvabil pe ServerA, dar nu-i va păsa dacă este rezolvabil de partea ta. Acestea ar putea fi nume de gazdă sau „slugs” (porecle). În ultimul caz, le asociați din nou numele de gazdă sau adresele IP .ssh/config
:
Server gazdăA
Nume gazdă ip.add.re.ss
Server gazdăB
Server ProxyJumpA
HostName host.name
De asemenea, puteți specifica ce nume de utilizator să utilizați pentru gazda proxy:
Server gazdăA
Utilizator utilizator proxy
Nume gazdă ip.add.re.ss
Server gazdăB
Server ProxyJumpA
HostName host.name
După aceea, intri ssh ServerB
. OpenSSH se conectează la ServerA și folosește un port aleatoriu pentru a redirecționa prin această conexiune la adresa ServerB, portul 22. Această conexiune este conectată în fundal; OpenSSH se conectează imediat la acest port redirecționat aleatoriu (la localhost, dar își verifică cu adevărat cheia .ssh/cunoscute_gazde
împotriva numelui „ServerB” și a adresei IP specificate în HostName, dacă există), astfel încât veți ajunge direct pe ServerB. Dacă emiteți „cine”, va spune că sunteți conectat de la adresa ServerA. Oricine stă între tine și ServerA nu are nicio modalitate posibilă de a ști că vorbești cu adevărat cu ServerB.
Puteți utiliza orice opțiune de linie de comandă SSH, acestea vor fi folosite pentru ServerB conexiune (realizată prin portul redirecționat). De exemplu. daca folosesti ssh -D 12345 utilizator@ServerB
, se va conecta la ServerA ca utilizator proxy cu portul redirecționat către ServerB:22, apoi se va conecta la acel port și se va autentifica la ServerB ca utilizator și va instala proxy SOCKS5 pe portul 12345.Adresa de ieșire pentru acel SOCKS5 ar fi ServerB, de ex. dacă utilizați acel proxy (de exemplu, într-un browser), părțile la distanță vor vedea că vă conectați de la adresa ServerB.
Puteți stivui mai multe jumphost-uri, va funcționa și:
Server gazdăB
Server ProxyJumpA
Server gazdăC
Server ProxyJumpC
și ssh ServerC
se va conecta mai întâi la ServerA cu redirecționarea portului către ServerB:22, apoi se va conecta prin această redirecționare la ServerB cu un alt port redirecționare la ServerC, apoi se va conecta la acel alt port și veți ajunge cu shell-ul ServerC.
Observați că vi se va cere o parolă pentru fiecare conexiune. Acest lucru este destul de greoi. Mai bine configurați și utilizați autentificarea bazată pe chei ssh-agent
.