Hogyan működik a fordított SSH-alagút?

Amint ezt megértettem, a tűzfalak (alapértelmezett beállításokat feltételezve) megtagadják az összes bejövő forgalmat, amelynek nincs előzőleg megfelelő kimenő forgalma.

Alapján Egy ssh kapcsolat megfordítása és Az SSH alagút megkönnyítve , a fordított SSH alagutazás felhasználható a bosszantó tűzfal korlátozások körül.

Szeretnék távoli gépen végrehajtani a shell parancsokat. A távoli gépnek saját tűzfala van, és egy további tűzfal (router) mögött van. IP-címe van, például 192.168.1.126 (vagy valami hasonló). Nem állok tűzfal mögött, és ismerem a távoli gép IP-címét az internetről nézve (nem a 192.168.1.126 címet). Ezenkívül megkérhetek valakit, hogy hajtsa végre a ssh (something) először gyökérként a távoli gépen.

Meg tudná valaki magyarázni nekem lépésről lépésre, hogyan működik a fordított SSH-alagút a tűzfalak (helyi és távoli gépek tűzfalai és a közöttük lévő további tűzfal) megkerülése érdekében?

Mi a kapcsolók szerepe (-R, -f, -L, -N)?

Megjegyzések

Válasz

Szeretek elmagyarázni ezt a fajta dolgot vizualizációval. 🙂

Gondoljon SSH-kapcsolataira, mint csövekre. Nagy csövek. Normál esetben ezeken a csöveken keresztül éri el a héj futtatását egy távoli számítógépen. A héj egy virtuális terminálban fut (tty). De ezt a részt már ismeri. egy csövön belül. Még mindig megvan a nagy SSH kapcsolat, de a -L vagy -R opcióval kisebb csövet állíthat be benne.

Minden csőnek van eleje és vége. A nagy cső, az SSH-kapcsolata, az SSH-klienssel kezdődött, és az SSH-kiszolgálóra kerül, amelyhez csatlakozott. Az összes kisebb cső ugyanazokkal a végpontokkal rendelkezik, azzal a különbséggel, hogy a “start” vagy a “end” szerepét az határozza meg, hogy a -L vagy -R (illetőleg) létrehozásukhoz.

(Nem mondtad, de feltételezem, hogy hogy az Ön által említett “távoli” gép, amely a tűzfal mögött van, hozzáférhet az internethez a Hálózati címfordítás (NAT) használatával. Ez nagyon fontos, ezért kérjük, javítsa ki ezt a feltételezést, ha hamis.)

Alagút létrehozásakor megad egy hirdetést ruha és kikötő, amelyre válaszolni fog, valamint egy cím és kikötő, ahová eljuttatják. A -L opció megadja az alagútnak, hogy válaszoljon az alagút helyi oldalán (a klienset futtató hoszt). A -R opció megadja az alagútnak, hogy válaszoljon a távoli oldalon (az SSH szerver).

ssh alagút irányai

Tehát … Ahhoz, hogy az internetről SSH-t tudjon tenni a tűzfal mögötti gépbe, szüksége van a kérdéses gépre, hogy SSH-kapcsolatot nyisson a külvilág felé, és tartalmazzon egy -R alagút, amelynek” belépési “pontja a kapcsolata” távoli “oldala.

A fenti két modell közül a jobb oldali.

p> A tűzfalú állomásról:

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

Ez utasítja az ügyfelet, hogy hozzon létre egy alagutat -R emote bejegyzéssel pont. Bármi, ami az alagút túlsó végén található 22222-es porthoz kapcsolódik, valójában eléri a “localhost 22-es portot”, ahol a “localhost” az alagút kilépési pontjának (azaz az ssh-kliensének) perspektívájából néz ki.

A további lehetőségek a következők:

  • -f megadja az ssh-nek a hátteret, miután hitelesített, ezért nem kell üldögélnie, amikor valamit fut a távoli szerver az alagút életben maradásához.
  • -N azt mondja, hogy szeretne SSH kapcsolatot, de valójában nem akar távoli parancsokat futtatni. Ha csak egy alagutat hoz létre, akkor ennek a lehetőségnek a megadása erőforrásokat takarít meg.
  • -T letiltja az ál-tty allokációt, ami azért megfelelő, mert Ön nem interaktív shell-t próbál létrehozni.

Jelszó kihívás lesz, hacsak nem állított be DSA vagy RSA kulcsokat jelszó nélküli bejelentkezéshez.

Ne feledje, hogy ERŐSEN azt javasolta, hogy használjon egy eldobható fiókot (ne a saját bejelentkezési adatait), amelyet csak erre az alagútra / ügyfélre / szerverre állított be.

Most a shell-jéből a yourpublichost , létesítsen kapcsolatot a tűzfalas állomással az alagúton keresztül:

ssh -p 22222 username@localhost 

Ön “ll kap egy gazdagép kulcs kihívást, mivel valószínűleg még soha nem érte el ezt a gazdagépet. Ezután jelszó kihívást kap a username fiókhoz (hacsak nem állított be kulcsokat a jelszó nélküli bejelentkezéshez).

Ha rendszeresen hozzáférni fog ehhez a gazdagéphez, egyszerűsítheti a hozzáférést azzal is, hogy néhány sort hozzáad a ~/.ssh/config fájljához:

host remotehostname User remoteusername Hostname localhost Port 22222 

Állítsa be az remotehostname és remoteusername alkalmazkodást. = “5c38e00a51”>

mezőnek meg kell egyeznie a távoli szerveren használt felhasználónevével, deremotehostnamelehet bármilyen gazdagépnév, amely megfelel Önnek, nem kell, hogy megfeleljen bármi megoldhatónak.

Lásd még:

Megjegyzések

  • mi a helyzet az ssh -D-vel. Kérjük, magyarázza el ugyanazon módszerrel.
  • A SOCKS proxyk nem azonosak az alagutakkal. Ha kérdése van a használatukról, kérjük, tegye fel .
  • I ‘ m nagyon nehezen követi ezt a magyarázatot a laza kifejezések használata miatt: kiszolgáló, kliens, helyi gép, távoli gép, hoszt, yourpublichost, localhost, távoli gépnév. Mindezen laza és meghatározatlan kifejezések mellett feltételezhető, hogy valakinek akár 8 számítógépre is szüksége lesz ennek beállításához. Ezt azért állítom, mert minden más szempontból nagyon jó magyarázatnak tűnik. Kérjük, csökkentse és határozza meg a kifejezéseket.
  • @ Rucent88, nem vagyok ‘ biztos abban, hogy milyen csökkentés lehetséges. Az ügyfél kapcsolatot létesít egy szerverrel. A ‘ általános terminológiája a hálózatépítés világában. A helyi és távoli gépek elég magától értetődőnek tűnnek. Ha ‘ zavarodott az SSH vagy az általános unix terminológia miatt a dokumentáció elolvasása után, akkor ‘ biztos vagyok benne, hogy ‘ nem okoz gondot, ha olyan embereket talál itt, akik szívesen válaszolnak minden kérdésére.
  • @ghoti Ez valóban nagyon zavaró, mert a helyi a távoli gépek pedig relatívak. Amikor a munkahelyen ülök, az otthoni számítógépem a távvezérlő, amikor pedig otthon ülök, a munkahelyi számítógép távoli. A kiszolgáló és az ügyfél is zavaros, amikor alagútról beszélünk. Például, ha az ssh -R segítségével csatlakozom otthonról a munkahelyemről. Az otthoni számítógépen csatlakozom a munkámhoz a localhost csatlakoztatásával. Tehát a foglalatok szempontjából a szerver maga az otthoni számítógép. De logikusan csatlakoztam a munkahelyi számítógépemhez. Ez ‘ zavaros.

Válasz

rajzoltam néhány vázlat

A gépet, ahová az ssh alagút parancsot beírják, »hosztnak hívják« .

ssh alagút a helyi felől indulva


ssh alagút a távoli

Bevezetés

  1. helyi: -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 azt jelenti: csatlakozzon az ssh-hez a connectToHost -hez, és az összes csatlakozási kísérletet továbbítsa a helyi sourcePort a onPort portra a forwardToHost nevű gépen, amely a connectToHost gépről érhető el.

  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 jelentése: csatlakozzon az ssh-hez connectToHost -hez, és az összes csatlakozási kísérletet továbbítsa a távoli sourcePort portra a a forwardToHost nevű gépen, amelyet a helyi gépéről lehet elérni.

További lehetőségek

  • -f elmondja az ssh-nek, hogy maga hitelesítés után háttérbe kerüljön, ezért nem kell üldögélnie a távoli kiszolgálón való futtatással, hogy az alagút maradjon életben.
  • -N azt mondja, hogy szeretne SSH kapcsolatot, de valójában nem akar távoli parancsokat futtatni. Ha csak egy alagutat hoz létre, akkor ennek a lehetőségnek a megadása erőforrásokat takarít meg.
  • -T letiltja az ál-tty allokációt, ami azért megfelelő, mert Ön nem interaktív shell-t próbál létrehozni.

Példád

A harmadik kép ezt az alagutat ábrázolja. De a »gazda« nevű kék számítógép azt a számítógépet képviseli, ahol valaki elindítja az ssh alagutat, ebben az esetben a tűzfalakkal ellátott gép. A parancsnak alapvetően úgy kell kinéznie, hogy

ssh -R 12345:localhost:22 YOURIP 

Most megnyílt az alagút.Most az ssh-n keresztül az alagúton keresztül csatlakozhat a tűzfalas géphez a

ssh -p 12345 localhost 

paranccsal, amely a saját localhost (a számítógéped) a 12345 porton, de az 12345 portot az alagúton keresztül továbbítják a tűzfal helyi portjának 22. számítógép (azaz maga a tűzfalú számítógép).

Megjegyzések

  • @erik, Hogyan rajzoltad ezeket a képeket?
  • I használta az Inkscape nevű nyílt forráskódú vektoros rajzeszközt és az egereimet (nos, valójában ez egy trackball: Marble FX a Logitech-től).
  • @ghoti: Alapértelmezés szerint a szerveren található hallgatási aljzat (az -R képemben a sárga távoli gép) csak a loopback interfész hez lesz kötve. Ez felülírható a bind_cím megadásával. Az üres bind_cím vagy a „*” cím azt jelzi, hogy a távoli socketnek minden interfészen hallgatnia kell. – Tehát csak próbálja ki: Kék számítógépen indítsa el a ssh -R 1234:localhost:8000 yellowcomputer parancsot. És a kék gépen is indítsa el python -m SimpleHTTPServer (egy egyszerű webszerver a 8000-es porton). Ezután a sárga gép böngészőjében nyissa meg az URL http://localhost:1234 címet, és látni fogja, hogy működik.
  • @erik, á, a zavaros rész azért van, mert a szemem rossz – nem láttam ‘ t a remotehost előtti helyet a parancsokban. Közelebbről megvizsgálva, azt látom, hogy az Ön diagramjai egyáltalán nem az opcionális bind_address címet adják meg [

. Elnézést a zavarért.

  • @briankip Igen, természetesen. Legalábbis ha ssh kapcsolatot szeretne létesíteni a tűzfal mögötti számítógéppel (az alagúton keresztül vagy közvetlenül, ha a tűzfal ezt megengedi). Vagyis: A tűzfalú számítógépen írt ssh-parancs csak alagutat nyit meg, de nem indul és nem működik ssh-daemon / -server néven. A következő kérdésének a következőnek kell lennie: hogyan lehet elindítani az sshd-t root jogosultságok nélkül (ha ez a probléma). 🙂
  • Válasz

    Az ssh alagút úgy működik, hogy a már létrehozott ssh kapcsolatot használja további forgalom küldésére.

    Ha távoli kiszolgálóhoz csatlakozik, akkor általában csak 1 csatornája van a normál felhasználói interakcióhoz (vagy 3 csatorna, ha az STDIN / STDOUT / STDERR-t külön tekintjük). A helyi vagy távoli ssh folyamat bármikor további csatornákat nyithat meg a meglévő kapcsolaton. Ezek a csatornák ezt követően küldik / fogadják az alagút forgalmát. Bármilyen forgalom küldésekor vagy fogadásakor az ssh folyamat egyszerűen azt mondja, hogy “ez a forgalom a csatorna foobar számára való.” a XXXX porton, és hogy a beérkezett forgalmat alagútba kell állítani, majd YYYY értékre kell állítani a ZZZZ porton.

  • A helyi ssh elkezdi hallgatni a XXXX portot (általában a 127.0.0.1, de módosítható).
  • Egyes alkalmazások megnyitják a kapcsolatot a helyi gép XXXX portjával.
  • A helyi ssh megnyit egy csatornát a távoli ssh-hez, és azt mondja: “bármilyen forgalom ezen a csatornán YYYY: ZZZZ
  • A távoli ssh csatlakozik az YYYY: ZZZZ-hez, és visszaküldi az “OK, a csatorna nyitva van”
  • Most a porton keresztüli kapcsolat mentén küldött forgalom A helyi gép XXXX-jét az ssh a YYYY: ZZZZ-hez kapcsolja.
  • Ez a folyamat pontosan ugyanaz mind az előre, mind a hátramenetben (csak cserélje ki a “helyi” és a “távoli” szavakat a a fenti eljárás). Bármelyik oldal elindíthatja az alagutat nem is kell annak lennie, amikor először elindítja az ssh-t. Az alagutakat akkor lehet megnyitni, amikor az ssh már fut (lásd: ESCAPE CHARACTERS, konkrétan ~C).

    A -R, -f, -L és -N, akkor csak meg kell keresnie a man oldalt, ez adja a lehető legjobb magyarázatot. De megemlítem -R és -L.
    -R elmondja a távoli ssh-nek hogy meghallgassa a kapcsolatokat, és hogy a helyi ssh-nek csatlakoznia kell a valódi úti célhoz. -L utasítja a helyi ssh-t, hogy figyeljen a kapcsolatokra, és hogy a távoli ssh-nek csatlakoznia kell a valódi célhoz.

    Megjegyzés: ez egy nagyon durva leírás, de elegendő információt kell adnia ahhoz, hogy tudd, mi folyik itt

    Válasz

    Ezt az SSH kézikönyv magyarázza, különös tekintettel a -L (helyi) és a -R (távoli).


    -L

    -L [bind_address:]port:host:hostport

    Megadja, hogy a portot a helyi (kliens) gazdagépen továbbítani kell az adott gazdagépre, és port a távoli oldalon .

    Ez úgy működik, hogy foglal egy foglalatot a helyi port meghallgatásához, opcionálisan a megadott bind_címhez kötve.

    Amikor kapcsolat jön létre ehhez a porthoz, a kapcsolat továbbításra kerül a biztonságos csatornán, és létrejön egy kapcsolat a host port hostport a távoli gépről .

    A következő példa egy IRC-munkamenetet alagútba vezet az 127.0.0.1 (localhost) ügyfélgépből az 1234-es port segítségével a távoli kiszolgálóhoz server.example.com:

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

    Megjegyzés: A -f opció Az ssh hátterek és az sleep 10 távoli parancs meg van határozva, hogy egy ideig engedélyezzék az alagutazni kívánt szolgáltatás elindítását.

    Példa:

    ssh `-N` -L 22000:localhost:11000 remote.server.com 
    • -N A csatlakozás után csak maradj ott (nem kapsz shell parancsot)

      Ne hajts végre távoli parancsot.

    • -L 22000 A kapcsolat az Ön személyes 22000-es portjáról származik, L szemészeti gép

    • localhost:11000remote.server.com megbizonyosodik arról, hogy az alagút másik vége localhost, port 11000

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

    Forrás: Illusztrált útmutató, oktatóanyag, útmutató az ssh alagutazásról .


    -R

    -R [bind_address:]port:host:hostport

    Megadja, hogy a távoli (kiszolgáló) gazdagépen található portot továbbítani kell a g iven hoszt és port a helyi oldalon .

    Ez úgy működik, hogy foglal egy foglalatot a port meghallgatásához a távoli oldalon, és amikor kapcsolat jön létre ehhez a porthoz, a kapcsolat továbbításra kerül a biztonságos csatornán, és csatlakozik a host portra hostport készül a helyi gépből .

    Példa:

    ssh -N -R 22000:localhost:11000 remote.server.com 
    • -N A csatlakozás után csak maradj ott (nem kapsz shell parancsot)

      Ne hajtson végre távoli parancsot.

    • -R 22000 A kapcsolat létrejön a R emote számítógép 22000-es portján (ebben az esetben a remote.server.com)

    • személyes, helyi számítógépe meggyőződik arról, hogy az alagút másik vége localhost, port 11000

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

    Forrás: Illusztrált útmutató, oktatóanyag, útmutató az ssh alagutazásról .

    megjegyzések

    • a fül és a száj világossá teszi, hogy ki ‘ beszél és aki ‘ hallgat!
    • Szeretem az illusztrációidat!

    Válasz

    A hálózati csatolókhoz való kötődést a fordított SSH-alagutak létrehozása során ebben a bejegyzésben ismertetjük. Íme egy példa 4 számítógéppel, amelyek két különböző hálózatban vannak:

    Vélemény, hozzászólás?

    Az email címet nem tesszük közzé. A kötelező mezőket * karakterrel jelöltük