Uwielbiam wyjaśniać tego rodzaju rzeczy poprzez wizualizację. :-)
Pomyśl o swoich połączeniach SSH jak o lampach. Duże rurki. Zwykle sięgasz przez te rurki, aby uruchomić powłokę na zdalnym komputerze. Powłoka działa w terminalu wirtualnym (tty). Ale znasz już tę część.
Pomyśl o swoim tunelu jak o rurze w rurze. Nadal masz duże połączenie SSH, ale opcja -L lub -R pozwala ustawić w nim mniejszą rurkę.
Każda rura ma początek i koniec. Duża rura, twoje połączenie SSH, zaczęło się od klienta SSH i kończy na serwerze SSH, z którym się połączyłeś. Wszystkie mniejsze rurki mają te same punkty końcowe, z tym wyjątkiem, że rola „początku” lub „końca” zależy od tego, czy je utworzyłeś ( -L
lub -R
).
(Nie powiedziałeś, ale założę, że „zdalna” maszyna, o której wspomniałeś, ta za zaporą, może uzyskać dostęp do Internetu za pomocą translacji adresów sieciowych (NAT). Jest to trochę ważne, więc popraw to założenie, jeśli jest fałszywe).
Podczas tworzenia tunelu podajesz adres i port, na który będzie on odpowiadał, oraz adres i port, na który zostanie dostarczony. Ta -L
opcja informuje tunel, aby odpowiedział po lokalnej stronie tunelu (host, na którym działa klient). Ta -R
opcja informuje tunel, aby odpowiedział po stronie zdalnej (serwer SSH).
Więc ... Aby móc połączyć się z Internetem przez SSH na maszynie za zaporą ogniową, potrzebujesz tego komputera, aby otworzyć połączenie SSH ze światem zewnętrznym i dołączyć -R
tunel, którego punktem wejścia jest „zdalna” strona jego połączenie.
Z dwóch modeli pokazanych powyżej chcesz ten po prawej.
Z hosta zaporowego:
ssh -f -N -T -R22222:localhost:22 yourpublichost.example.com
To mówi Twojemu klientowi, aby założył tunel z -R
punktem wejścia emotki. Wszystko, co zostanie dołączone do portu 22222 na drugim końcu tunelu, faktycznie osiągnie „port localhost 22”, gdzie „localhost” jest z punktu widzenia punktu wyjścia tunelu (tj. Klienta ssh).
Inne opcje to:
-f
mówi ssh, aby sam się w tle po uwierzytelnieniu, więc nie musisz siedzieć i uruchamiać czegoś na zdalnym serwerze, aby tunel pozostał przy życiu.
-N
mówi, że chcesz mieć połączenie SSH, ale tak naprawdę nie chcesz uruchamiać żadnych zdalnych poleceń. Jeśli wszystko, co tworzysz, to tunel, to włączenie tej opcji oszczędza zasoby.
-T
wyłącza alokację pseudo-tty, co jest odpowiednie, ponieważ nie próbujesz utworzyć interaktywnej powłoki.
Nie będzie hasła, chyba że skonfigurujesz klucze DSA lub RSA do logowania bez hasła.
Pamiętaj, że jest zdecydowanie zalecane, abyś używał konta „wyrzucanego” (nie własnego loginu), które skonfigurowałeś tylko dla tego tunelu / klienta / serwera.
Teraz z poziomu swojej powłoki na swoim serwerze publicznym nawiąż połączenie z hostem zaporowym przez tunel:
ssh -p 22222 username@localhost
Dostaniesz główne wyzwanie hosta, ponieważ prawdopodobnie nigdy wcześniej nie trafiłeś na tego hosta. Następnie otrzymasz wyzwanie dla hasła do username
konta (chyba że skonfigurowałeś klucze do logowania bez hasła).
Jeśli zamierzasz regularnie uzyskiwać dostęp do tego hosta, możesz również uprościć dostęp, dodając kilka wierszy do ~/.ssh/config
pliku:
host remotehostname
User remoteusername
Hostname localhost
Port 22222
Dostosuj remotehostname
i dopasuj remoteusername
. remoteusername
Pole musi dopasować swoją nazwę użytkownika na zdalnym serwerze, ale remotehostname
może być dowolna nazwa hosta, który ci odpowiada, że nie ma nic, aby dopasować rozpoznawana.
(Aby ujawnić odwrotny punkt końcowy na nielokalnym adresie IP hosta , sprawdź ten post )