GNU/Linux >> Znalost Linux >  >> Linux

Ssh – Jak funguje zpětné tunelování Ssh?

Pokud tomu rozumím, firewally (za předpokladu výchozího nastavení) odmítají veškerý příchozí provoz, který nemá žádný předchozí odpovídající odchozí provoz.

Reverzní tunelování SSH, založené na obrácení připojení ssh a snadném tunelování SSH, lze použít k překonání nepříjemných omezení brány firewall.

Chtěl bych spouštět příkazy shellu 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 firewallem a znám IP adresu vzdáleného počítače, jak je vidět z internetu (nikoli adresa 192.168.1.126). Navíc mohu někoho požádat, aby provedl ssh (something) nejprve jako root na vzdáleném počítači.

Mohl by mi někdo krok za krokem vysvětlit, jak funguje zpětné tunelování SSH, aby se obešly firewally (firewally místních a vzdálených počítačů a další firewall mezi nimi)?

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

Přijatá odpověď:

Rád vysvětluji takové věci prostřednictvím vizualizace. 🙂

Představte si svá připojení SSH jako trubky. Velké trubky. Normálně se dostanete skrz tyto trubky a spustíte shell na vzdáleném počítači. Shell běží ve virtuálním terminálu (tty). Ale tuhle část už znáte.

Představte si svůj tunel jako trubku v trubce. Stále máte velké připojení SSH, ale možnost -L nebo -R vám umožní nastavit menší trubici uvnitř.

Každá trubice má začátek a konec. Velká trubka, vaše připojení SSH, začalo s vaším klientem SSH a skončilo 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 (respektive) je vytvořit.

(Neřekl jste, ale budu předpokládat, že „vzdálený“ počítač, který jste zmínil, ten za firewallem, může přistupovat k internetu pomocí překladu síťových adres (NAT). To je docela důležité, takže opravte prosím tento předpoklad, pokud je nepravdivý.)

Při vytváření tunelu zadáváte adresu a port, na kterém bude odpovídat, a adresu a port, na který bude doručován. -L volba říká tunelu, aby odpověděl na místní straně tunelu (hostitel, na kterém běží váš klient). -R volba říká tunelu, aby odpověděl na vzdálené straně (server SSH).

Takže… Abyste mohli SSH z internetu do počítače za firewallem, potřebujete, aby dotyčný počítač otevřel SSH spojení s vnějším světem a obsahoval -R tunel, jehož „vstupní“ bod je „vzdálená“ strana jeho spojení.

Ze dvou výše uvedených modelů chcete ten napravo.

Související:Existuje způsob, jak pracovat s vnořenými CollectionViews ve formulářích Xamarin pomocí MvvmCross?

Z hostitele chráněného bránou firewall:

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

To řekne vašemu klientovi, aby vytvořil tunel s -R vstupní bod emocí. Cokoli, co se připojí k portu 22222 na vzdáleném konci tunelu, ve skutečnosti dosáhne „localhost port 22“, kde „localhost“ je z pohledu výstupního bodu tunelu (tj. vašeho ssh klienta).

Další možnosti jsou:

  • -f po autentizaci sdělí ssh samotnému pozadí, takže nemusíte sedět a něco spouštět na vzdáleném serveru, aby tunel zůstal živý.
  • -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í této možnosti šetří zdroje.
  • -T zakáže alokaci pseudo-tty, což je vhodné, protože se nepokoušíte vytvořit interaktivní shell.

Pokud jste nenastavili klíče DSA nebo RSA pro přihlášení bez hesla, dojde k výzvě hesla.

Všimněte si, že DŮRAZNĚ doporučujeme používat jednoúčelový účet (nikoli vlastní přihlašovací údaje), který jste nastavili pouze pro tento tunel/zákazníka/server.

Nyní z vašeho shellu na vaše publikace , vytvořte připojení k hostiteli chráněnému firewallem prostřednictvím tunelu:

ssh -p 22222 [email protected]

Získáte klíčovou výzvu pro hostitele, protože tohoto hostitele jste pravděpodobně ještě nikdy nezasáhli. Poté obdržíte výzvu k zadání hesla pro username účtu (pokud jste nenastavili klíče pro přihlašování bez hesla).

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

host remotehostname
    User remoteusername
    Hostname localhost
    Port 22222

Upravte remotehostname a remoteusername slušet. remoteusername pole musí odpovídat vašemu uživatelskému jménu na vzdáleném serveru, ale remotehostname může to být jakýkoli název hostitele, který vám vyhovuje, nemusí odpovídat ničemu, co by bylo možné vyřešit.

  • Vystavte zpětný koncový bod na jiném hostiteli IP
  • Tipy k používání ControlMaster pro údržbu vašeho tunelu

Linux
  1. Co je NGINX? Jak to funguje?

  2. Jak nastavit SSH tunelování

  3. Jak nastavit Reverse SSH Tunnel v Linuxu

  1. Jak funguje příkaz ps?

  2. Jak nastavit ssh tunel pro předávání ssh?

  3. Jak funguje Kerberos s SSH?

  1. Jak Awk ‚!a[$0]++‘ funguje?

  2. Jak Sticky Bit funguje?

  3. Ssh – Jak funguje Tcp-keepalive v Ssh?