- Dave McKay
@TheGurkha
- July 18, 2019, 9:00am EDT
Need to SSH to an unreachable Linux computer? Niech on zadzwoni do ciebie, a następnie przeczesz to połączenie, aby uzyskać własną zdalną sesję SSH. Pokażemy ci, jak to zrobić.
Gdy będziesz chciał użyć odwrotnego tunelowania SSH
Czasami, zdalne komputery mogą być trudno dostępne. W miejscu, w którym się znajdują, mogą obowiązywać ścisłe reguły zapory sieciowej, a może lokalny administrator skonfigurował skomplikowane reguły Network Address Translation. Jak dotrzeć do takiego komputera, jeśli chcesz się z nim połączyć?
Ustalmy kilka etykiet. Twój komputer jest komputerem lokalnym, ponieważ znajduje się blisko Ciebie. Komputer, z którym zamierzasz się połączyć, jest komputerem zdalnym, ponieważ znajduje się w innym miejscu niż Ty.
Aby rozróżnić komputery lokalne i zdalne używane w tym artykule, komputer zdalny nazywa się „howtogeek” i działa pod kontrolą systemu Ubuntu Linux (z fioletowymi oknami terminala). Komputer lokalny nazywa się „Sulaco” i działa pod kontrolą systemu Manjaro Linux (z żółtymi oknami terminala).
Normalnie uruchomiłbyś połączenie SSH z komputera lokalnego i połączyłbyś się z komputerem zdalnym. To nie jest opcja w scenariuszu sieciowym, który opisujemy. To naprawdę nie ma znaczenia, jaki jest konkretny problem z siecią – jest to przydatne, gdy nie możesz połączyć się przez SSH bezpośrednio ze zdalnym komputerem.
Jeśli konfiguracja sieci po twojej stronie jest prosta, zdalny komputer może się z tobą połączyć. To jednak nie jest wystarczające dla twoich potrzeb, ponieważ nie daje ci działającej sesji wiersza poleceń na zdalnym komputerze. Ale jest to początek. Masz ustanowione połączenie między dwoma komputerami.
Odpowiedź leży w odwrotnym tunelowaniu SSH.
Co to jest odwrotne tunelowanie SSH?
Odwrotne tunelowanie SSH pozwala na użycie ustanowionego połączenia do ustanowienia nowego połączenia z komputera lokalnego z powrotem do komputera zdalnego.
Ponieważ oryginalne połączenie zostało nawiązane z komputera zdalnego do Ciebie, użycie go w drugim kierunku jest użyciem go „w odwrotnym kierunku”. A ponieważ SSH jest bezpieczne, umieszczasz bezpieczne połączenie wewnątrz istniejącego bezpiecznego połączenia. Oznacza to, że Twoje połączenie z komputerem zdalnym działa jak prywatny tunel wewnątrz oryginalnego połączenia.
I tak dochodzimy do nazwy „odwrotne tunelowanie SSH.”
Jak to działa?
Odwrotne tunelowanie SSH polega na tym, że komputer zdalny używa nawiązanego połączenia do nasłuchiwania nowych żądań połączenia z komputera lokalnego.
Komputer zdalny nasłuchuje na porcie sieciowym komputera lokalnego. Jeśli wykryje żądanie SSH na tym porcie, przekazuje to żądanie połączenia z powrotem do siebie, w dół nawiązanego połączenia. To zapewnia nowe połączenie z komputera lokalnego do komputera zdalnego.
To jest łatwiejsze do skonfigurowania niż do opisania.
Usługiwanie tunelowania odwrotnego SSH
SSH będzie już zainstalowane na komputerze z systemem Linux, ale może być konieczne uruchomienie demona SSH (sshd), jeśli komputer lokalny nigdy wcześniej nie akceptował połączeń SSH.
sudo systemctl start sshd
Aby demon SSH był uruchamiany przy każdym ponownym uruchomieniu komputera, użyj następującego polecenia:
sudo systemctl enable sshd
Na zdalnym komputerze użyjemy następującego polecenia.
- Opcja
-R
(reverse) mówissh
, że nowe sesje SSH muszą zostać utworzone na zdalnym komputerze. - Opcja „43022:localhost:22” mówi
ssh
, że żądania połączenia na port 43022 na komputerze lokalnym powinny zostać przekierowane na port 22 na komputerze zdalnym. Port 43022 został wybrany, ponieważ jest on wymieniony jako nieprzydzielony. Nie jest to numer specjalny. - [email protected] to konto użytkownika, z którym komputer zdalny ma się połączyć na komputerze lokalnym.
ssh -R 43022:localhost:22 [email protected]
Możesz otrzymać ostrzeżenie o tym, że nigdy wcześniej nie łączyłeś się z komputerem lokalnym. Możesz też zobaczyć ostrzeżenie, gdy szczegóły połączenia zostaną dodane do listy rozpoznanych hostów SSH. To, co zobaczysz – jeśli cokolwiek – zależy od tego, czy połączenia były kiedykolwiek wykonywane z komputera zdalnego do komputera lokalnego.
Zostaniesz poproszony o podanie hasła konta, którego używasz do łączenia się z komputerem lokalnym.
Zauważ, że po nawiązaniu połączenia znak zachęty do wydawania poleceń zmienia się z dave@howtogeek na dave@sulaco.
Jesteśmy teraz połączeni z komputerem lokalnym z komputera zdalnego. Oznacza to, że możemy wydawać mu polecenia. Użyjmy polecenia who
, aby zobaczyć logowania na komputerze lokalnym.
who
Widzimy, że osoba posiadająca konto użytkownika o nazwie dave zalogowała się na komputerze lokalnym, a komputer zdalny połączył się (używając tych samych danych uwierzytelniających użytkownika) z adresu IP 192.168.4.25.
RELATED: How to Determine the Current User Account in Linux
Połączenie z komputerem zdalnym
Ponieważ połączenie z komputera zdalnego jest udane i nasłuchuje on połączeń, możemy spróbować połączyć się z komputerem zdalnym z komputera lokalnego.
Komputer zdalny nasłuchuje na porcie 43022 na komputerze lokalnym. Tak więc – nieco sprzecznie z intuicją – aby nawiązać połączenie z komputerem zdalnym, prosimy ssh
o nawiązanie połączenia z komputerem lokalnym na porcie 43022. To żądanie połączenia zostanie przekazane do komputera zdalnego.
ssh localhost -p 43022
Zostajemy poproszeni o podanie hasła do konta użytkownika, a następnie połączeni z komputerem zdalnym z komputera lokalnego. Nasz komputer Manjaro radośnie mówi: „Witamy w Ubuntu 18.04.2 LTS”.
Zauważ, że znak zachęty zmienił się z dave@sulaco na dave@howtogeek. Osiągnęliśmy nasz cel, jakim było nawiązanie połączenia SSH z naszym trudno dostępnym zdalnym komputerem.
Używanie SSH z kluczami
Aby uczynić wygodniejszym łączenie się ze zdalnego komputera z lokalnym, możemy skonfigurować klucze SSH.
Na zdalnym komputerze wpisz następujące polecenie:
ssh-keygen
Zostaniesz poproszony o podanie hasła. Możesz nacisnąć Enter, aby zignorować pytanie o hasło, ale nie jest to zalecane. Oznaczałoby to, że każdy na zdalnym komputerze mógłby nawiązać połączenie SSH z Twoim lokalnym komputerem bez pytania o hasło.
Trzy lub cztery słowa oddzielone symbolami będą stanowić solidne hasło.
Twoje klucze SSH zostaną wygenerowane.
Musimy przenieść klucz publiczny na komputer lokalny. Użyj tej komendy:
ssh-copy-id [email protected]
Zostaniesz poproszony o podanie hasła do konta użytkownika, na które się logujesz, w tym przypadku [email protected].
Przy pierwszym żądaniu połączenia z komputera zdalnego do komputera lokalnego będziesz musiał podać hasło. Nie będziesz musiał wprowadzać go ponownie dla przyszłych żądań połączenia, tak długo, jak to okno terminala pozostaje otwarte.
POWIĄZANE: How to Create and Install SSH Keys From the Linux Shell
Not All Tunnels Are Scary
Niektóre tunele mogą być ciemne i kręte, ale odwrotne tunelowanie SSH nie jest zbyt trudne do nawigowania, jeśli potrafisz utrzymać w głowie relację między komputerem zdalnym a lokalnym. Następnie odwróć je.
Dave McKay po raz pierwszy użył komputerów, gdy modna była taśma dziurkowana, i od tego czasu zajmuje się programowaniem. Po ponad 30 latach pracy w branży IT jest obecnie pełnoetatowym dziennikarzem technologicznym. W swojej karierze pracował jako niezależny programista, kierownik międzynarodowego zespołu programistów, kierownik projektu usług informatycznych, a ostatnio jako inspektor ochrony danych. Dave jest ewangelistą Linuksa i zwolennikiem open source.Read Full Bio ”