it-swarm-eu.dev

Jak funguje tunel Reverzní SSH?

Jak to chápu, firewally (za předpokladu výchozího nastavení) odmítnou veškerý příchozí provoz, který nemá předchozí odpovídající odchozí provoz.

Na základě obrácení ssh připojení a SSH Tunneling Made Easy , lze pomocí reverzního SSH tunelování obejít omezující omezení brány firewall.

Chtěl bych provádět příkazy Shell na vzdáleném počítači. Vzdálený počítač má svůj vlastní firewall a je za dalším firewallem (routerem). Má IP adresu jako 192.168.1.126 (nebo něco podobného). Nejsem za bránou firewall a znám IP adresu vzdáleného počítače, jak je vidět z Internetu (nikoli adresu 192.168.1.126). Navíc mohu někoho požádat, aby nejprve provedl jako vzdálený počítač ssh (something) jako root.

Mohl by mi někdo krok za krokem vysvětlit, jak funguje reverzní tunel SSH, aby obešel brány firewall (brány firewall místních a vzdálených počítačů a další firewall mezi nimi)?

Jaká je role přepínačů (-R, -f, -L, -N)?

376
Ali

Rád vysvětluji tento druh věcí vizualizací. :-)

Vaše připojení SSH považujte za zkumavky. Velké trubky. Normálně se dostanete přes tyto trubky, abyste spustili prostředí na vzdáleném počítači. Shell běží ve virtuálním terminálu (tty). Ale tuto část už znáte.

Myslete na svůj tunel jako na trubku uvnitř trubice. Stále máte velké připojení SSH, ale volba -L nebo -R vám umožní nastavit menší trubku uvnitř.

Každá trubice má začátek a konec. Velká trubice, vaše připojení SSH, začala u vašeho klienta SSH a končí na serveru SSH, ke kterému jste se připojili. Všechny menší zkumavky mají stejné koncové body, kromě toho, že role "start" nebo "end" je určena tím, zda jste použili -L nebo -R (příslušně) k jejich vytvoření.

(Neřekl jste, ale budu předpokládat, že "vzdálený" stroj, který jste zmínil, ten, který stojí za bránou firewall, má přístup k internetu pomocí Network Address Translation (NAT). Je to tak důležité, takže opravte tento předpoklad, pokud je nepravdivý.)

Při vytváření tunelu určíte adresu a port, na který bude odpovídat, a adresu a port, na který budou doručeny. The -L řekne tunelu, aby odpověděl na místní straně tunelu (hostitel, na kterém je spuštěn váš klient). The -R volba říká tunelu, aby odpověděl na vzdálené straně (SSH server).

ssh tunnel directions

Takže ... Abyste mohli SSH z Internetu do počítače za bránou firewall, potřebujete, aby dotyčný stroj otevřel připojení SSH do vnějšího světa a zahrnul -R tunel, jehož „vstupní“ bod je „vzdálenou“ stranou jeho spojení.

Z výše uvedených dvou modelů chcete ten pravý.

Od hostitele firewalled:

ssh -f -N -T -R22222:localhost:22 yourpublichost.example.com

Klientovi to řekne, aby vytvořil tunel s -Rzadejte vstupní bod. Cokoli, co se připojí k portu 22222 na vzdáleném konci tunelu, skutečně dosáhne „portu 22 localhost“, kde „localhost“ je z pohledu koncového bodu tunelu (tj. Vašeho ssh klienta).

Další možnosti jsou:

  • -f řekne ssh samému pozadí poté, co se ověří, takže nemusíte sedět a spouštět něco na vzdáleném serveru, aby tunel zůstal naživu.
  • -N říká, že chcete připojení SSH, ale ve skutečnosti nechcete spouštět žádné vzdálené příkazy. Pokud vše, co vytváříte, je tunel, pak zahrnutím této možnosti ušetříte zdroje.
  • -T zakáže přidělování pseudotty, což je vhodné, protože se nepokoušíte vytvořit interaktivní prostředí.

Pokud nenastavíte klíče DSA nebo RSA pro přihlášení bez hesla, bude to výzva k zadání hesla.

Důrazně doporučujeme používat odhozený účet (nikoli vlastní přihlášení), který jste nastavili právě pro tento tunel/zákazník/server.

Nyní z vašeho Shell yourpublichost navažte spojení s Firewalled Hostem tunelem:

ssh -p 22222 [email protected]

Dostanete výzvu s klíčem hostitele, protože jste pravděpodobně nikdy tohoto hostitele nezasáhli. Poté dostanete výzvu k zadání hesla pro účet username (pokud jste nenastavili klíče pro přihlášení bez hesla).

Pokud se chystáte pravidelně přistupovat k tomuto hostiteli, můžete také zjednodušit přístup přidáním několika řádků do svého ~/.ssh/config file:

Host remotehostname
    User remoteusername
    Hostname localhost
    Port 22222

Upravte remotehostname a remoteusername, aby vyhovovaly. Pole remoteusername se musí shodovat s vaším uživatelským jménem na vzdáleném serveru, ale remotehostname může být libovolný název hostitele, který vám vyhovuje, nemusí odpovídat ničemu, co lze vyřešit.

Viz také:

433
ghoti

Nakreslil jsem nějaké náčrtky

Stroj, do kterého je zadán příkaz ssh tunnel, se nazývá "váš hostitel".

ssh tunnel starting from local


ssh tunnel starting from remote

Úvod

  1. local: -L Specifies that the given port on the local (client) Host is to be forwarded to the given Host and port on the remote side.

    ssh -L sourcePort:forwardToHost:onPort connectToHost Znamená: spojit se ssh do connectToHost a předat všechny pokusy o připojení místnísourcePort na port onPort na stroj s názvem forwardToHost, kterého lze dosáhnout ze stroje connectToHost.

  2. remote: -R Specifies that the given port on the remote (server) Host is to be forwarded to the given Host and port on the local side.

    ssh -R sourcePort:forwardToHost:onPort connectToHost Znamená: spojit se ssh do connectToHost a předat všechny pokusy o připojení vzdálenésourcePort na port onPort na stroj s názvem forwardToHost, na který se dostanete z místního počítače.

Další možnosti

  • -f Řekne ssh samotnému pozadí poté, co se ověří, takže nemusíte sedět a spouštět něco na vzdáleném serveru, aby tunel zůstal naživu.
  • -N Říká, že chcete připojení SSH, ale ve skutečnosti nechcete spouštět žádné vzdálené příkazy. Pokud vše, co vytváříte, je tunel, pak zahrnutím této možnosti ušetříte zdroje.
  • -T Zakáže pseudottyčkování, což je vhodné, protože se nepokoušíte vytvořit interaktivní prostředí.

Váš příklad

Třetí obrázek představuje tento tunel. Ale modrý počítač s názvem "Váš hostitel" představuje počítač, kde někdo spouští tunel ssh, v tomto případě stroj s firewallem .

Takže, požádejte někoho o zahájení ssh tunelového připojení k vašemu počítači. Příkaz by měl v podstatě vypadat

ssh -R 12345:localhost:22 YOURIP

Nyní je tunel otevřen. Nyní se můžete připojit pomocí ssh k firewalled stroju tunelem s příkazem

ssh -p 12345 localhost

který se připojí k vašemu vlastnímu localhost (váš počítač) na portu 12345, ale port 12345 je přes tunel přeposlán na port 22 localhost počítače s firewallem (tj. samotný počítač s firewallem).

389
erik

tunelování ssh funguje pomocí již vytvořeného spojení ssh pro odesílání dalšího provozu.

Když se připojujete ke vzdálenému serveru, obvykle máte pouze 1 kanál pro normální interakci uživatele (nebo 3 kanály, pokud považujete STDIN/STDOUT/STDERR za samostatné). Proces lokálního nebo vzdáleného ssh může kdykoli otevřít další kanály na existujícím připojení. Tyto kanály pak odesílají/přijímají provoz tunelu. Když odesíláte nebo přijímáte jakýkoli provoz, proces ssh jednoduše říká „tento provoz je pro kanál foobar“.

V zásadě to funguje takto:

  1. Řeknete ssh, aby začal poslouchat na portu XXXX a že veškerý přijatý provoz by měl být tunelován a poté nastaven na Y.Y.Y.Y na portu ZZZZ.
  2. Místní ssh začne poslouchat na portu XXXX (obvykle na 127.0.0.1, ale lze jej změnit).
  3. Některá aplikace otevře připojení k portu XXXX v místním počítači.
  4. Místní ssh otevře kanál do vzdáleného ssh a říká: „veškerý provoz na tomto kanálu jde do Y.Y.Y.Y: ZZZZ
  5. Vzdálený ssh se připojí k Y.Y.Y.Y: ZZZZ a odešle zpět „OK, kanál je otevřený“
  6. Nyní je veškerý přenos odeslaný po připojení k portu XXXX na místním počítači prošifrován pomocí ssh na Y.Y.Y.Y: ZZZZ.

Tento proces je stejný pro tunelování vpřed i vzad (ve výše uvedeném postupu stačí zaměnit slova „local“ a „remote“). Tunel může spustit kterákoli strana. To nemusí být ani při prvním spuštění ssh. Tunely můžete otevřít, když je již spuštěn ssh (viz ESCAPE CHARACTERS, konkrétně ~C).

Pro roli -R, -f, -L, a -N, opravdu byste se měli jen podívat na manuálovou stránku, to vám dá nejlepší možné vysvětlení. Ale zmíním se o -R a -L.
-R řekne vzdálenému ssh, aby poslouchal spojení, a že místní ssh by se měl připojit ke skutečnému cíli. -L řekne místnímu ssh, aby poslouchal spojení, a že vzdálený ssh by se měl připojit ke skutečnému cíli.

Poznámka, jedná se o velmi hrubý popis, ale měl by vám poskytnout dostatek informací, abyste věděli, co se děje

24
Patrick

To je vysvětleno v příručce SSH, zejména rozdíly mezi -L (místní) a -R (dálkový).


-L

-L [bind_address:]port:Host:hostport

Určuje, že daný port na místním (klientském) hostiteli má být přeposlán na daného hostitele a port na vzdálené straně .

To funguje přidělením soketu k poslechu portu na místní straně, případně vázaného na zadanou vazbu_adresu.

Kdykoli dojde k připojení k tomuto portu, se připojení přesměruje přes zabezpečený kanál a naváže se připojení na port Hosthostport ze vzdáleného počítače .

Následující příklad vyladí relaci IRC z klientského počítače 127.0.0.1 (localhost) pomocí portu 1234 ke vzdálenému serveru server.example.com:

$ ssh -f -L 1234:localhost:6667 server.example.com sleep 10

Poznámka: -f možnost pozadí ssh a vzdálený příkaz sleep 10 je specifikováno tak, aby umožňovalo dostatek času ke spuštění služby, která má být tunelována.

Příklad:

ssh `-N` -L 22000:localhost:11000 remote.server.com
  • -N Poté, co se připojíte, zůstaňte tam (nedostanete výzvu Shell)

    Nevykonávejte vzdálený příkaz.

  • -L 22000 Připojení vznikne na portu 22000 vašeho osobního [~ # ~] l [~ # ~] ocal stroje

  • localhost:11000 - remote.server.com zajistí, že druhý konec tunelu je localhost, port 11000

ssh -N -L 22000:192.168.1.2:11000 remote.server.com

Zdroj: Ilustrovaný průvodce, tutoriál, návod, postup při ssh tuneling .


-R

-R [bind_address:]port:Host:hostport

Určuje, že daný port na vzdáleném (serverovém) hostiteli má být přeposlán na daného hostitele a port na místní straně .

To funguje přidělením soketu k poslechu port na vzdálené straně, a kdykoli je navázáno připojení k tomuto portu, je spojení přeposláno přes zabezpečený kanál a je vytvořeno připojení k portu Host port hostport z místního počítače .

Příklad:

ssh -N -R 22000:localhost:11000 remote.server.com
  • -N Poté, co se připojíte, zůstaňte tam (nedostanete výzvu Shell)

    Nevykonávejte vzdálený příkaz.

  • -R 22000 Připojení vznikne na portu 22000 počítače [~ # ~] r [~ # ~] (v tomto případě remote.server.com)

  • localhost:11000 váš osobní, místní počítač zajistí, že druhý konec tunelu je localhost, port 11000

ssh -N -R 22000:localhost:11000 remote.server.com

Zdroj: Ilustrovaný průvodce, tutoriál, návod, postup při ssh tuneling .

18
kenorb