Kuten ymmärrän, palomuurit (oletusasetukset olettaen) estävät kaiken saapuvan liikenteen, jolla ei ole aiemmin vastaavaa lähtevää liikennettä.
Perustuu SSH-yhteyden peruuttaminen ja SSH-tunnelointi on helppoa , käänteistä SSH-tunnelointia voidaan käyttää ärsyttävien palomuurirajoitusten ympärillä.
Haluan suorittaa komentotulkikomennot etäkoneella. Etäkoneella on oma palomuuri ja se on ylimääräisen palomuurin (reitittimen) takana. Sillä on IP-osoite, kuten 192.168.1.126 (tai jotain vastaavaa). En ole palomuurin takana ja tiedän etäkoneen IP-osoitteen Internetistä (ei 192.168.1.126-osoitetta). Lisäksi voin pyytää jotakuta suorittamaan ssh (something)
ensin etäkoneen pääkäyttäjänä.
Voisiko kukaan selittää minulle askel askeleelta, kuinka käänteinen SSH-tunnelointi toimii palomuurien (paikallisten ja etäkoneiden palomuurien ja niiden välisen lisäpalomuurin) kiertämiseksi?
Mikä on kytkinten rooli (-R
, -f
, -L
, -N
)?
Kommentit
- Liittyvät (ohjeet): Kuinka voin määrittää käänteisen SSH-yhteyden yhdistävään tietokoneeseen?
Vastaa
Rakastan selittää tällaista asiaa visualisoimalla. 🙂
Ajattele SSH-yhteyksiäsi putkina. Suuret putket. Normaalisti saavutat näiden putkien kautta suorittaaksesi kuoren etätietokoneella. Kuori toimii virtuaalisessa päätelaitteessa (tty). Mutta tiedät tämän osan jo.
Ajattele tunneliasi putkena putkessa. Sinulla on vielä iso SSH-yhteys, mutta -L tai -R -vaihtoehdon avulla voit asettaa pienemmän putken sen sisälle.
Jokaisella putkella on alku ja loppu. Iso putki, SSH-yhteytesi, aloitit SSH-asiakkaasi kanssa ja päätyy SSH-palvelimeen, johon olet muodostanut yhteyden. Kaikilla pienemmillä putkilla on samat päätepisteet, paitsi että ”alku” – tai ”loppu” -rooli määräytyy sen mukaan, käytitkö -L
tai -R
(vastaavasti) niiden luomiseksi.
(Et ole sanonut, mutta aion olettaa että mainitsemasi ”etäkone”, palomuurin takana, voi käyttää Internetiä käyttämällä verkko-osoitekäännöstä (NAT). Tämä on tavallaan tärkeää, joten korjaa tämä oletus, jos se on väärä.)
Kun luot tunnelin, määrität mainoksen mekko ja satama, johon se vastaa, sekä osoite ja satama, johon se toimitetaan. Vaihtoehto -L
käskee tunnelin vastaamaan tunnelin paikallisella puolella (isäntä, joka hoitaa asiakasta). -R
-vaihtoehto käskee tunnelia vastaamaan etäpuolella (SSH-palvelin).
Joten … Jotta voisit SSH: n Internetistä palomuurin takana olevaan koneeseen, tarvitset kyseisen koneen avaamaan SSH-yhteyden ulkomaailmaan ja sisällyttämään -R
tunneli, jonka” sisääntulopiste ”on hänen yhteydensa” kauko-osa ”.
Edellä olevista kahdesta mallista haluat oikean.
Palomuurin isännältä:
ssh -f -N -T -R22222:localhost:22 yourpublichost.example.com
Tämä käskee asiakasta perustamaan tunnelin -R
emote-merkinnällä kohta. Mikä tahansa, joka liittyy tunnelin kauimmassa olevaan porttiin 22222, tavoittaa ”paikallisen isännän portin 22”, missä ”paikallinen isäntä” on tunnelin poistumispisteen (eli ssh-asiakkaasi) näkökulmasta.
Muut vaihtoehdot ovat:
-
-f
kertoo ssh: n taustalle itsensä todentamisen jälkeen, joten sinun ei tarvitse istua juoksemassa jotain etäpalvelin, jotta tunneli pysyy hengissä. -
-N
sanoo, että haluat SSH-yhteyden, mutta et todellakaan halua suorittaa mitään etäkomentoja. Jos kaikki, mitä luot, on tunneli, tämän vaihtoehdon sisällyttäminen säästää resursseja. -
-T
poistaa pseudo-tty-varauksen käytöstä, mikä on tarkoituksenmukaista, koska et ole yritetään luoda interaktiivinen kuori.
Salasanahaaste tulee olemaan, ellet ole määrittänyt DSA- tai RSA-avaimia salasanattomalle kirjautumiselle.
Huomaa, että se on VAHVA suositteli, että käytät heittotiliä (älä omaa kirjautumistunnustasi), jonka olet määrittänyt juuri tälle tunnelille / asiakkaalle / palvelimelle.
Nyt komentoriviltäsi yourpublichost , muodosta yhteys palomuuri-isäntään tunnelin kautta:
ssh -p 22222 username@localhost
Sinä ”ll Hanki isännän avainhaaste, koska et ole koskaan ennen lyönyt tätä isäntää. Sitten saat salasanahaasteen username
-tilille (ellet ole määrittänyt avaimia salasanattomalle kirjautumiselle).
Jos aiot käyttää tätä isäntää säännöllisesti, voit myös yksinkertaistaa käyttöä lisäämällä muutama rivi ~/.ssh/config
-tiedostoon:
host remotehostname User remoteusername Hostname localhost Port 22222
Säädä remotehostname
ja remoteusername
sopivaksi. remoteusername
-kentän on vastattava käyttäjänimiä etäpalvelimessa, mutta remotehostname
voi olla mikä tahansa sinulle sopiva isäntänimi, sen ei tarvitse vastata mitään ratkaistavaa.
Katso myös:
- Paljasta käänteinen päätepiste ei-paikallinen isäntä IP
- Vinkkejä
ControlMaster
tunnelin ylläpitoa varten
Kommentit
- entäs ssh -D. Selitä samalla menetelmällä.
- SOCKS-välityspalvelimet eivät ole samat kuin tunnelit. Jos sinulla on kysyttävää niiden käytöstä, kysy se .
- I ’ Minulla on erittäin vaikeaa noudattaa tätä selitystä johtuen termien löyhästä käytöstä: palvelin, asiakas, paikallinen kone, etäkone, isäntä, oma julkaisijasi, paikallinen isäntä, etätunnuksen nimi. Kaikilla näillä löyhillä ja määrittelemättömillä termeillä voidaan olettaa, että joku tarvitsee jopa 8 tietokonetta tämän asettamiseksi. Sanon tämän, koska se näyttää kaikilta muilta osin erittäin hyvältä selitykseltä. Pienennä ja määritä termejä.
- @ Rucent88, en ’ ole varma, mikä supistaminen olisi mahdollista. Asiakas muodostaa yhteyden palvelimeen. Se ’ on yhteinen terminologia kaikkialla verkossa. Paikalliset ja etäkoneet näyttävät melko itsestään selviltä. Jos olet ’ hämmentynyt SSH: sta tai yleisestä unix-terminologiasta lukiessasi dokumentaatiota, olen ’ varma, että ’ Ei ole vaikeuksia löytää täältä ihmisiä, jotka ovat halukkaita vastaamaan kaikkiin kysymyksiisi.
- @ghoti Se ’ on todellakin hämmentävää, koska paikallinen ja etäkoneet ovat suhteellisia. Kun istun työpaikalla, kotitietokoneeni on kaukosäädin, kun istun kotona, työpaikatietokone on etäinen. Palvelin ja asiakas ovat myös hämmentäviä puhuessaan tunneloinnista. Esimerkiksi, jos muodostan yhteyden kotiin töistä ssh -R: llä. Liityn työhöni kotitietokoneesta yhdistämällä localhost. Joten pistorasioiden näkökulmasta palvelin on itse kotitietokone. Mutta loogisesti yhdistin työtietokoneeni. Se ’ on hämmentävää.
Vastaa
Olen piirtänyt joitain luonnoksia
Kone, johon ssh-tunnelikomento kirjoitetaan, kutsutaan »isäntäsi« .
Johdanto
-
paikallinen:
-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
tarkoittaa: muodosta yhteys ssh: äänconnectToHost
ja välitä kaikki yhteysyritykset paikalliseensourcePort
porttiinonPort
koneella, jonka nimi onforwardToHost
, johon pääseeconnectToHost
-laitteesta. -
kaukosäädin:
-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
tarkoittaa: muodosta yhteys ssh: äänconnectToHost
, ja välitä kaikki yhteysyritykset -kaukosäätimeensourcePort
porttiinonPort
koneella nimeltäforwardToHost
, johon pääsee paikalliselta koneeltasi.
Lisävaihtoehdot
-
-f
kertoo ssh: n itselleen taustaksi todentamisen jälkeen, joten sinun ei tarvitse istua juoksemalla jotain etäpalvelimessa, jotta tunneli pysy hengissä. -
-N
sanoo, että haluat SSH-yhteyden, mutta et todellakaan halua suorittaa mitään etäkomentoja. Jos kaikki, mitä luot, on tunneli, tämän vaihtoehdon sisällyttäminen säästää resursseja. -
-T
poistaa pseudo-tty-varauksen käytöstä, mikä on tarkoituksenmukaista, koska et ole yritetään luoda interaktiivinen kuori.
Esimerkkisi
Kolmas kuva edustaa tätä tunnelia. Mutta sininen tietokone nimeltä isäntäsi edustaa tietokonetta, jossa joku aloittaa ssh-tunnelin, tässä tapauksessa palomuuri.
Pyydä siis jotakuta aloittamaan ssh-tunneliyhteys koneeseesi. Komennon tulisi periaatteessa näyttää tältä:
ssh -R 12345:localhost:22 YOURIP
Nyt tunneli on avattu.Voit nyt muodostaa yhteyden ssh: n kautta palomuuriin koneeseen tunnelin kautta komennolla
ssh -p 12345 localhost
joka muodostaa yhteyden omaan localhost
(koneesi) portissa 12345
, mutta portti 12345
välitetään tunnelin kautta palomuurin paikallisen isännän porttiin 22. tietokone (eli itse palomuuri tietokone).
Kommentit
- @erik, Kuinka piirtit nämä kuvat?
- I käytin avoimen lähdekoodin vektoripiirustustyökalua nimeltä Inkscape ja hiiriäni (no, itse asiassa se on ohjauspallo: Marble FX Logitechiltä).
- @ghoti: Palvelimen kuunteluliitin (-R-kuvassani keltainen etäisäntä) on oletusarvoisesti sidottu vain loopback- käyttöliittymään . Tämä voidaan ohittaa määrittämällä bind_address. Tyhjä sidososoite tai osoite ’*’ osoittaa, että etäpistorasian tulisi kuunnella kaikkia liitäntöjä. – Kokeile vain: Käynnistä sininen tietokone
ssh -R 1234:localhost:8000 yellowcomputer
. Ja myös sinisellä koneella käynnistäpython -m SimpleHTTPServer
(yksinkertainen verkkopalvelin portissa 8000). Avaa sitten keltaisen koneen verkkoselaimessa URL-osoitehttp://localhost:1234
ja näet sen toimivan. - @erik, ah, sekava osa johtuu siitä, että silmäni ovat huono – En nähnyt ’ t nähdä tilaa
remotehost
ennen komentojasi. Tarkastellessani tarkemmin huomaan, että kaaviot eivät ’ t osoittavat lainkaan valinnaista bind_address-osoitetta. Anteeksi sekaannuksesta. - @briankip Kyllä, tietysti. Ainakin, jos haluat muodostaa ssh-yhteyden palomuurin takana olevaan tietokoneeseen (tunnelin läpi tai suoraan, jos palomuuri sen sallii). Eli: palomuuri-tietokoneelle kirjoittamasi ssh-komento avaa vain tunnelin, mutta ei käynnisty tai toimi ssh-daemon / -server -palvelimena. Seuraava kysymyksesi tulisi olla, miten SSD käynnistetään ilman pääkäyttöoikeuksia (jos se on sinun ongelmasi). 🙂
Vastaa
ssh-tunnelointi toimii käyttämällä jo luotua ssh-yhteyttä ylimääräisen liikenteen lähettämiseen.
Kun muodostat yhteyden etäpalvelimeen, sinulla on yleensä vain yksi kanava normaalia käyttäjän vuorovaikutusta varten (tai 3 kanavaa, jos pidät STDIN / STDOUT / STDERR erillisinä). Milloin tahansa paikallinen tai etäinen ssh-prosessi voi avata lisäkanavia olemassa olevassa yhteydessä. Nämä kanavat lähettävät / vastaanottavat sitten tunneliliikennettä. Kun lähetät tai vastaanotat liikennettä, ssh-prosessi yksinkertaisesti sanoo ”tämä liikenne on kanavan foobarille”.
Se toimii olennaisesti näin:
- Käsket ssh: tä aloittamaan kuuntelun portissa XXXX ja että kaikki vastaanotettu liikenne olisi tunneloitava ja asetettava sitten arvoon YYYY portissa ZZZZ.
- Paikallinen ssh alkaa kuunnella portissa XXXX (yleensä
127.0.0.1
, mutta sitä voidaan muuttaa). - Jotkut sovellukset avaavat yhteyden paikallisen koneen porttiin XXXX.
- Paikallinen ssh avaa kanavan etä-ssh: lle ja sanoo ”kaikki liikenne” tällä kanavalla menee YYYY: ZZZZ
- Kaukosäädin muodostaa yhteyden YYYY: ZZZZ -palveluun ja lähettää takaisin ”OK, kanava on auki”
- Nyt kaikki liikenne, joka lähetetään portin yhteyden kautta XXXX paikallisessa koneessa on ssh: n välityksellä YYYY: ZZZZ.
Tämä prosessi on täsmälleen sama sekä eteen- että taaksepäin kulkeville tunneleille (vaihda vain sanat ”paikallinen” ja ”kauko” Kumpikin puoli voi aloittaa tunnelin Ei tarvitse edes olla, kun aloitat ssh: n. Voit avata tunneleita, kun ssh on jo käynnissä (katso ESCAPE CHARACTERS
, erityisesti ~C
).
-R
, -f
, -L
ja -N
, sinun pitäisi vain tutustua man-sivuun, se antaa sinulle parhaan mahdollisen selityksen. Mutta mainitsen -R
ja -L
.
-R
kertoo etä-SSH: lle kuunnella yhteyksiä ja että paikallisen ssh: n tulisi muodostaa yhteys todelliseen määränpäähän. -L
käskee paikallista ssh: tä kuuntelemaan yhteyksiä ja että etäshsh: n tulisi muodostaa yhteys todelliseen kohteeseen.
Huomaa, tämä on erittäin karkea kuvaus, mutta sen pitäisi antaa sinulle tarpeeksi tietoa tietääksesi mitä tapahtuu
Vastaa
Tämä selitetään SSH-käsikirjassa, etenkin erojen -L
(paikallinen) ja -R
(kaukosäädin).
-L
-L [bind_address:]port:host:hostport
Määrittää, että -portti paikallisessa (asiakas) isännässä on välitettävä annetulle isännälle ja etäsivun portti .
Tämä toimii jakamalla liitäntä paikallisen puolen portin kuunteluun, joka on valinnaisesti sidottu määritettyyn bind_osoitteeseen.
Aina kun muodostetaan yhteys tähän porttiin, yhteys välitetään suojatun kanavan kautta ja muodostetaan yhteys kohteeseen
host
porttihostport
etäkoneelta .
Seuraava esimerkki tunneli IRC-istunnon asiakaskoneelta 127.0.0.1
(localhost
) porttia 1234 käyttäen etäpalvelimelle server.example.com
:
$ ssh -f -L 1234:localhost:6667 server.example.com sleep 10
Huomaa: Vaihtoehto -f
taustat ssh ja kauko-komento sleep 10
on määritetty antamaan aika tunneloitavan palvelun käynnistämiseen.
Esimerkki:
ssh `-N` -L 22000:localhost:11000 remote.server.com
-
-N
Kun olet muodostanut yhteyden, ripusta siellä (et saa komentokehotetta)Älä suorita etäkomentoa.
-
-L 22000
Yhteys syntyy henkilökohtaisen porttisi 22000, L okaalikone -
localhost:11000
–remote.server.com
varmistaa, että tunnelin toinen pää onlocalhost
, portti11000
Lähde: Kuvitettu opas, opetusohjelma, ohjeet ssh-tunnelointiin .
-R
-R [bind_address:]port:host:hostport
Määrittää, että etäpalvelimen (palvelimen) isännän -portti on välitettävä g: lle. iven-isäntä ja portti paikallisella puolella .
Tämä toimii jakamalla liitäntä
port
päälle etäpuolella, ja aina kun yhteys muodostetaan tähän porttiin, yhteys välitetään edelleen suojatun kanavan kautta ja yhteys tehdäänhost
-porttiinhostport
paikallisesta koneesta .
Esimerkki:
ssh -N -R 22000:localhost:11000 remote.server.com
-
-N
Kun olet muodostanut yhteyden, ripusta vain siellä (et saa komentokehotetta)Älä suorita etäkomentoa.
-
-R
22000 Yhteys syntyy R emote-tietokoneen portissa 22000 (tässä tapauksessa remote.server.com) -
henkilökohtainen tietokoneesi varmistaa, että tunnelin toinen pää on
localhost
, portti11000
Lähde: Kuvitettu opas, opetusohjelma, ohjeet ssh-tunnelointiin .
kommentit
- korva ja suu tekevät kristallinkirkkaiksi kuka ’ puhuu ja kuka ’ kuuntelee!
- Rakastan kuviasi!
Vastaa
Verkkoliitäntöihin sitoutuminen käänteisten SSH-tunnelien muodostamisen yhteydessä selitetään tässä viestissä . Tässä on esimerkki neljästä tietokoneesta, jotka asuvat kahdessa eri verkossa: