Jak przypisać nazwę hosta do tunelu SSH

16

Używam ssh [email protected] -g -L 4321:localhost:28017 do utworzenia tunelu z mojego MacBooka na mój serwer dedykowany u mojego dostawcy hostingu. To dobrze działa. Teraz chcę uzyskać dostęp do kilku stron administracyjnych na zdalnym serwerze (strona statusu MongoDB, strona RabbitMQ itp., Wszystkie na różnych portach). Wszystkie są powiązane z 127.0.0.1 na zdalnym komputerze. Jak mogę dostosować to polecenie ssh do

  • przypisz nazwę do tunelu i użyj np. „my.tunnel.name” w mojej przeglądarce
  • aby móc zdefiniować zdalny port w mojej przeglądarce; Chciałbym połączyć się z moim.tunnel.name:port, aby móc dzwonić do różnych stron

Czy to możliwe z ssh? Przeczytałem strony podręcznika i przeglądałem go od dwóch dni, ale wydaje się, że to nie działa.

--edit 2012-06-01 23: 36-- Dzięki podanym odpowiedziom i komentarzom przekierowanie portów działa teraz

ssh [email protected] -D 4321

Mogę ustawić to jako proxy w mojej przeglądarce, a przeglądarka będzie traktować każde żądanie do localhost: anyport tak, jakby zostało wysłane na zdalnym serwerze. Używanie nazwy nie jest teraz konieczne, ponieważ przeglądarka jest przeznaczona tylko dla zdalnych stron serwera.

brains_at_work
źródło

Odpowiedzi:

12

To, co opisujesz, nie jest możliwe. Ale wciąż są dobre wieści:

Możliwe jest jednak nawiązanie połączenia dynamicznego z serwerem SSH. Spowoduje to otwarcie portu na komputerze lokalnym, na który można wskazać ustawienie proxy w przeglądarce i umożliwić użycie tunelu jako serwera proxy. Musisz jednak wpisać nazwę hosta / ip i port w przeglądarce, tak jakby przeglądarka była uruchomiona na komputerze, na którym działa serwer SSH.

Polecenie wygląda następująco: ssh [email protected] -D 1234
Następnie wskaż serwer proxy przeglądarki localhost:1234.

Jeśli więc tunelujesz do serwera A i chcesz połączyć się z serwerem B, wpisujesz w przeglądarce dowolny adres, który wpisujesz w przeglądarce działającej na serwerze A. Jeśli przeglądarka działająca na serwerze A nie może połączyć się z serwerem B (jeśli proces na serwerze B nasłuchuje tylko na 127.0.0.1), wtedy nadal nie możesz się połączyć. Wygląda na to, że masz tylko jeden serwer, ale chciałem mieć pewność, że to jasne.

Jeśli masz tylko jeden serwer, tunelujesz go za pomocą połączenia dynamicznego, ustaw serwer proxy. Będziesz wtedy mógł wpisać „localhost: 1234” (na przykład) w przeglądarce i połączy się on z usługą uruchomioną na zdalnym serwerze na porcie 1234.

Uwaga Securit: Nigdy nie ustawiaj serwera, na którym root może SSH! Poważna wada bezpieczeństwa. Utwórz normalne konto użytkownika (który może su lub sudo) i SSH w jako ten użytkownik.

Chris S.
źródło
2
Używasz -L 1234 (lokalne przekazywanie portów), kiedy powinieneś używać -D 1234 (dynamiczne przekazywanie portów). Być może unikniesz także użycia opcji -g, -g oznacza, że ​​zdalne hosty mogą łączyć się z Twoim serwerem przesyłania dalej, co nie jest tym, czego oczekujesz, jeśli robisz to ze stacji roboczej.
Mattias Ahnberg
Dzięki Chris. Już tego próbowałem. Nie mogę użyć polecenia ssh tylko z określonym portem. Zwraca błąd: „Zła lokalna specyfikacja przesyłania„ 1234 ””
brains_at_work
@ matthias-ahnberg: Świetnie, załatwiło sprawę. dzięki dynamicznemu przekierowaniu mogę teraz używać portu jako serwera proxy i hosta lokalnego: niektóre połączenia są kierowane na zdalny serwer.
brains_at_work
@MattiasAhnberg Wow, co za pierdolony mózg. Dziękuję za poprawę.
Chris S
Postępowałem zgodnie z tym procesem, ale otrzymałem błąd „Połączenie zostało zresetowane” w Firefoksie.
rivu
23

Możesz przypisać nazwę, korzystając z faktu, że twój adapter sprzężenia zwrotnego będzie zasadniczo odpowiadał na dowolny adres w sieci 127.0.0.0/8.

Zamiast wiązania z portem 4321, możesz połączyć się z 127.1.2.3:4321. Następnie po prostu ustaw wpis hosta, który odwzorowuje nazwę na adres pętli zwrotnej, którego użyłeś, więc mapuje foo.bar 127.1.2.3.

W mojej konfiguracji SSH na mojej administracyjnej stacji roboczej mam skonfigurowanych wiele tuneli, aby były one powiązane z pewnym adresem w zakresie pętli zwrotnych, i mam wpisy w pliku hosta, więc otwieram wiele tuneli równolegle, używając tego samego portu i rozróżniam je za pomocą Nazwa.

Więc jeśli połączysz się w ten sposób

ssh [email protected] -g -L 127.1.2.3:4321:localhost:28017

A plik hosts ma taką linię.

127.1.2.3 my.tunnel.name

Następnie powinieneś być w stanie połączyć się z my.tunnel.name:4321 z lokalnego komputera.

Jeśli masz dodatkową przestrzeń adresów IP w sieci, do której podłączony jest klient ssh, możesz nawet przypisać dodatkowy adres do interfejsu Ethernet i użyć jednego z prawdziwych adresów IP, a następnie skonfigurować wpisy w DNS, jeśli chcesz, aby inne systemy mogły do korzystania z tunelu SSH.

Opcja -L -L [bind_address:]port:host:hostportpozwala użyć dowolnego poprawnego adresu IP w systemie lokalnym do połączenia. Musisz również uwzględnić tę -gopcję, jeśli chcesz, aby inne hosty mogły łączyć się przez tunel ssh.

Zoredache
źródło
Musiałem dodać ip do mojej pętli zwrotnej w osx. ifconfig l0 alias 127.0.1.1 255.255.255.0w przeciwnym razie świetna wskazówka!
devians
1
Jeśli nie chcesz tworzyć powłoki, uruchom ją -Nna końcu polecenia. W ten sposób łatwiej jest pamiętać, że jest to tunel, a nie tylko połączenie SSH.
mlissner,
Podczas korzystania 127.1.2.3musiałem to zrobić na moim Macbooku:, ifconfig lo0 alias 127.1.2.3 255.255.255.0który dodaje się 127.1.2.3jako nowy adres interfejsu lo0.
Donn Lee
5

Utwórz dynamiczne przekierowanie portów na poziomie aplikacji (zasadniczo skarpety proxy) za pomocą tunelu SSH, a następnie skieruj aplikacje przez ten. Aby utworzyć tunel dynamiczny, połącz się w następujący sposób:

ssh [email protected] -D 127.0.0.1:31337

Następnie skonfiguruj aplikację, aby używała tego jako proxy SOCKSv5.

Jeśli chcesz powiązać z tym nazwę hosta, po prostu dodaj /etc/hostswpisy, które wskazują na 127.0.0.1, ale ładniejszym sposobem może być dodanie 127.0.0.2 dla pierwszego tunelu i wpis hosta dla tego, 127.0.0.3 dla drugiego tunel i osobny wpis hosta dla tego itd. Jeśli dodasz aliasy dla 127.0.0.1, czasami ten alias pojawi się w innych poleceniach wyszukiwania localhost, co może być mylące!

Aby płynnie korzystać z tego w przeglądarce internetowej, możesz użyć dodatku proxy, jako przykład faworyzuję przeglądarkę Chrome i do tego używam dodatku o nazwie Proxy Switchy!. Możesz go pobrać tutaj:
https://chrome.google.com/webstore/detail/caehdcpeofiiigpdhbabniblemipncjj

W konfiguracji tego dodatku mogę zdefiniować kilka oddzielnych serwerów proxy, a następnie powiązać wyrażenia regularne hostów / adresów URL, aby użyć pewnych serwerów proxy, w ten sposób zawsze będę poprawnie przekierowywany przez właściwe tunele bez konieczności ręcznego przełączania. Daj mi znać, jeśli potrzebujesz dodatkowych wyjaśnień na temat któregokolwiek z kroków!

Mattias Ahnberg
źródło
Dzięki za dodatkową wskazówkę. Ponieważ używam również Chrome, nie muszę też utrzymywać otwartego FireFoxa.
brains_at_work