Strona główna » Blog » Tunelowanie SSH w Windows z wykorzystaniem Plink

Tunelowanie SSH w Windows z wykorzystaniem Plink

Współczesne systemy komputerowe bywają układami wielu usług zlokalizowanych na oddzielnych serwerach każda. Tylko wybrane z nich są tak skonfigurowane sieciowo, aby móc przyjmować komunikację z Internetu czyli sieci publicznej. Pozostałe są odizolowane w swojej własnej wewnętrznej sieci. Takie rozwiazanie stosowane jest ze względów bezpieczeństwa. Osoby pracujące z takimi systemami na poziomie ich administracji i utrzymania mają jednak problem – jak zawiadywać czymś, do czego nie ma dostępu? Stosowane są więc różne specjalne kanały dostępu do tej sieci wewnętrznej: połączenia VPN, tunelowanie SSH czy dostęp przez specjalne aplikacje dostępne na serwerze-pośredniku i obslugiwane z poziomu przeglądarki internetowej. Nie będę tutaj rozważał szczegółowo różnych za i przeciw wymienionych metod. Chciałbym skupić się na praktycznym korzystaniu z tylko jednej z nich, tunelowania SSH, jako że jest to bardzo wygodna metoda do codziennej pracy.

Otwieranie pojedynczego tunelu z użyciem Plink

Tunelowanie SSH to wykorzystanie usługi SSH jako usługi pośredniczącej proxy. Aby móc korzystać z tunelowania potrzebujemy dostepu do SSH serwera, który ma się stać dla nas pośrednikiem, czyli musimy albo mieć login i hasło, albo klucz SSH. Musimy też znać adresy oraz porty serwerów i usług do których chcemy dotrzeć. Jeżeli mamy już to, wówczas potrzebujemy już tylko odpowiedniego oprogramowania do tworzenia i obsługi tunelu. Tym właśnie jest Plink, narzędzie będące “command-line connection utility“. Oprogramowanie to jest darmowe a jego autorem jest Simon Tatham.

Zbierzmy w jednym miejscu to, co niezbędne do otwarcia tunelu:

  • Adres serwera z usługą SSH;
  • Login do SSH;
  • Adresy serwerów i portów usług, do których uzyskać dostęp;
  • Adresy serwerów i portów, z których ruch będzie kierowany do usług docelowych.

Rozpatrzmy to na jakimś przykładzie. Załóżmy, że mam dwa serwery: 37.80.80.15 widoczny z Internetu oraz schowany w sieci wewnętrznej 192.168.0.13. Chciałbym dostać się na ten ostatni do usługi bazy danych MySQL, czyli na port 3306. Na serwerze 37.80.80.15 uruchomiona jest usługa SSH i mam do niej login i hasło. Chciałbym uczynić takie tunelowanie, aby port 10001 na moim lokalnym komputerze (127.0.0.1) był powiązany z portem 3306 na serwerze 192.168.0.13. Za pomocą Plink robi się to tak:

plink.exe -v -ssh -2 -noagent -L 127.0.0.1:10001:192.168.0.13:3306 grzegorz.kowalski@37.80.80.15

Po uruchomieniu tego polecenia zostaniemy zapytani o hasło. Po jego poprawnym podaniu będziemy mogli podłączyć się dowolnym klientem MySQL do adresu 127.0.0.1 i portu 10001. W rzeczywistości połączymy się z usługą MySQL z serwera 192.168.0.13.

Wyjaśnienia wymagają użyte opcje. Opcja -v to po prostu “verbose”, czyli stosowanie przez aplikację większej ilości czytelnych dla człowieka komunikatów. Opcja -ssh to żądanie wykorzystania protokolu SSH (Plink umozliwia stosowanie też -telnet, -rlogin, -raw, -serial). Opcja -2 oznacza wykorzystanie SSH w wersji 2. Natomiast -noagent wyłącza stosowanie agenta uwierzytelnień trzymającego rozkodowane klucze prywatne w pamięci.

Polecam przejrzeć też i inne opcje uruchomienia Plink po wpisaniu –help albo w dokumentacji.

Otwieranie wielu tuneli na raz

Gdybym chciał obsłużyć od razu więcej tunelowań, mogę podać więcej parametrów -L. Wygodnie może być to zamknąć w pliku batch. Poniżej przykład na otwarcie tunelu SSH do usług SSH na dwóch wewnętrznych serwerach:

@echo off
set PLINK=plink.exe
set OPTIONS=-v -ssh -2 -noagent
set PROXY_HOST=37.80.80.15
set PROXY_USER=grzegorz.kowalski
set TUNNELS=-L 127.0.0.1:10113:192.168.0.13:22 -L 127.0.0.1:10114:192.168.0.14:22
%PLINK% %OPTIONS% %TUNNELS% %PROXY_USER%@%PROXY_HOST%

Administracja bazami MySQL z użyciem HeidiSQL oraz Plink

Całkiem miły i darmowy program do administrowania bazami SQL, HeidiSQL, posiada wbudowane wsparcie obsługi tuneli SSH w odniesieniu do baz MySQL. Edytując połączenie bazodanowe należy zmienić jego typ z “MySQL (TCP/IP)” na “MySQL (SSH Tunnel)”, wskazać lokalizację Plink i wypełnić wymagane informacje. Program sam sobie uruchomi Plink i skonfiguruje połączenie. Jest to o tyle wygodne, ze łatwo można sobie włączyć i wyłączyć obsługę tunelowania a same dane podstawowe podłączania do danego serwera się nie zmieniają. To pozwala na wygodne przełączanie się między trybem pracy z wewnątrz sieci (np. z serwerowni) i spoza.

Polecam. 🙂

Dodaj komentarz