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
- Kapcsolódó (hogyan): Hogyan állíthatom be a fordított SSH kapcsolatot a csatlakozó számítógéppel?
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).
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, deremotehostname
lehet bármilyen gazdagépnév, amely megfelel Önnek, nem kell, hogy megfeleljen bármi megoldhatónak.
Lásd még:
- Tegye ki a fordított végpontot egy non-localhost IP
- Tippek a
ControlMaster
az alagút karbantartásához
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« .
felől indulva
Bevezetés
-
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 aconnectToHost
-hez, és az összes csatlakozási kísérletet továbbítsa a helyisourcePort
aonPort
portra aforwardToHost
nevű gépen, amely aconnectToHost
gépről érhető el. -
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-hezconnectToHost
-hez, és az összes csatlakozási kísérletet továbbítsa a távolisourcePort
portra a aforwardToHost
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 elpython -m SimpleHTTPServer
(egy egyszerű webszerver a 8000-es porton). Ezután a sárga gép böngészőjében nyissa meg az URLhttp://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.
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.
127.0.0.1
, de módosítható). 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
porthostport
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:11000
–remote.server.com
megbizonyosodik arról, hogy az alagút másik végelocalhost
, port11000
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 ahost
portrahostport
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
, port11000
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: