Co to jest odwrotne tunelowanie SSH? (i jak z niego korzystać)

Potrzebujesz połączenia SSH z nieosiągalnym komputerem z systemem Linux? Niech zadzwoni do Ciebie, a następnie zanotuj to połączenie, aby uzyskać własną zdalną sesję SSH. Pokażemy Ci, jak to zrobić.

Kiedy będziesz chciał użyć odwrotnego tunelowania SSH

Czasami zdalne komputery mogą być trudno dostępne. Witryna, w której się znajdują, może mieć restrykcyjne reguły zapory ogniowej lub być może lokalny administrator skonfigurował skomplikowane ustawienia Tłumaczenie adresów sieciowych zasady. Jak dotrzeć do takiego komputera, skoro trzeba się z nim połączyć?

Ustalmy kilka etykiet. Twój komputer jest komputerem lokalnym, ponieważ jest blisko Ciebie. Komputer, z którym zamierzasz się połączyć, jest komputerem zdalnym, ponieważ znajduje się w innej lokalizacji niż Ty.

Aby rozróżnić komputery lokalne i zdalne używane w tym artykule, komputer zdalny nosi nazwę „newsblog.pl” i działa pod kontrolą systemu Ubuntu Linux (z fioletowymi oknami terminala). Lokalny komputer nazywa się „Sulaco” i działa pod kontrolą systemu Manjaro Linux (z żółtymi oknami terminala).

Normalnie odpaliłbyś plik Połączenie SSH z komputera lokalnego i połącz się z komputerem zdalnym. To nie jest opcja w opisywanym scenariuszu sieciowym. Naprawdę nie ma znaczenia, jaki jest konkretny problem z siecią – jest to przydatne, gdy nie możesz wysłać SSH bezpośrednio do zdalnego komputera.

Ale jeśli konfiguracja sieci po twojej stronie jest prosta, komputer zdalny może się z tobą połączyć. Samo to jednak nie wystarczy do Twoich potrzeb, ponieważ nie zapewnia działającej sesji wiersza poleceń na komputerze zdalnym. Ale to jest 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 umożliwia użycie tego nawiązanego połączenia do skonfigurowania nowego połączenia z komputera lokalnego z powrotem do komputera zdalnego.

Ponieważ pierwotne połączenie pochodziło z komputera zdalnego do Ciebie, użycie go do przejścia w innym kierunku oznacza użycie go „na odwrót”. A ponieważ SSH jest bezpieczne, umieszczasz bezpieczne połączenie w istniejącym bezpiecznym połączeniu. Oznacza to, że 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 ustanowionego połączenia do nasłuchiwania nowych żądań połączeń z komputera lokalnego.

Komputer zdalny nasłuchuje na porcie sieciowym na komputerze lokalnym. Jeśli wykryje żądanie SSH do tego portu, przekazuje to żądanie z powrotem do siebie, w dół ustanowionego połączenia. Zapewnia to nowe połączenie z komputera lokalnego do komputera zdalnego.

Łatwiej jest skonfigurować niż opisać.

Korzystanie z tunelowania zwrotnego SSH

SSH zostanie 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

sudo systemctl uruchom sshd w oknie terminala

Aby demon SSH był uruchamiany przy każdym ponownym uruchomieniu komputera, użyj tego polecenia:

sudo systemctl enable sshd

sudo systemctl włącz sshd w oknie terminala

Na komputerze zdalnym używamy następującego polecenia.

Opcja -R (reverse) mówi ssh, że na zdalnym komputerze muszą zostać utworzone nowe sesje SSH.
„43022: localhost: 22” informuje ssh, że żądania połączeń do portu 43022 na komputerze lokalnym powinny być przekazywane do portu 22 na komputerze zdalnym. Port 43022 został wybrany, ponieważ tak jest wymienione jako nieprzydzielone. To nie jest liczba specjalna.
[email protected] to konto użytkownika, z którym komputer zdalny będzie się łączył na komputerze lokalnym.

ssh -R 43022:localhost:22 [email protected]

ssh -R 43022: localhost: 22 dave@sulaco.local w oknie terminala

Możesz otrzymać ostrzeżenie, ż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 widzisz – jeśli cokolwiek – zależy od tego, czy kiedykolwiek nawiązano połączenia z komputera zdalnego do komputera lokalnego.

Zostaniesz poproszony o podanie hasła konta, którego używasz do łączenia się z komputerem lokalnym.

Szczegóły połączenia SSH w oknie terminala

Zwróć uwagę, że po nawiązaniu połączenia wiersz polecenia zmienia się z dave @ newsblog.pl 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ć loginy na komputerze lokalnym.

who

komenda who w oknie terminala

Widzimy, że osoba z kontem użytkownika o nazwie dave zalogowała się na komputerze lokalnym, a komputer zdalny połączył się (używając tych samych poświadczeń użytkownika) z adresu IP 192.168.4.25.

Łączenie się z komputerem zdalnym

Ponieważ połączenie z komputera zdalnego zakończyło się sukcesem i nasłuchuje 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

ssh localhost -p 43022 w oknie terminala

Zostajemy poproszeni o podanie hasła do konta użytkownika, a następnie łączymy się z komputerem zdalnym z komputera lokalnego. Nasz komputer Manjaro z radością mówi „Witamy w Ubuntu 18.04.2 LTS”.

odwrotne połączenie tunelu SSH z komputerem zdalnym

Zwróć uwagę, że wiersz polecenia zmienił się z dave @ sulaco na dave @ newsblog.pl. Osiągnęliśmy nasz cel, jakim było nawiązanie połączenia SSH z naszym trudno dostępnym komputerem zdalnym.

Korzystanie z SSH z kluczami

Aby wygodniej było łączyć się z komputera zdalnego z komputerem lokalnym, możemy skonfigurować klucze SSH.

Na komputerze zdalnym wpisz to polecenie:

ssh-keygen

ssh-keygen w oknie terminala

Zostaniesz poproszony o podanie hasła. Możesz nacisnąć klawisz Enter, aby zignorować pytania związane z hasłem, 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 utworzą solidne hasło.

ssh generowanie klucza w oknie terminala

Twoje klucze SSH zostaną wygenerowane.

Musimy przesłać klucz publiczny na komputer lokalny. Użyj tego polecenia:

ssh-copy-id [email protected]

ssh-copy-id dave@sulaco.local w oknie terminala

Zostaniesz poproszony o podanie hasła do konta użytkownika, na które się logujesz, w tym przypadku [email protected].

przesyłanie kluczy SSH do lokalnego komputera w oknie terminala

Gdy po raz pierwszy wysyłasz żądanie połączenia z komputera zdalnego do komputera lokalnego, musisz podać hasło. Nie będziesz musiał wpisywać go ponownie dla przyszłych żądań połączenia, dopóki okno terminala pozostanie otwarte.

okno dialogowe żądania hasła

Nie wszystkie tunele są przerażające

Niektóre tunele mogą być ciemne i kręte, ale odwrotne tunelowanie SSH nie jest zbyt trudne do nawigacji, jeśli potrafisz utrzymać relację między komputerem zdalnym a komputerem lokalnym w głowie. Następnie odwróć to.