VNC i ssh

Niniejsze HOWTO w pochodzi ze strony http://www.freesco.pl

Jak zdalnie zarządzać przy pomocy VNC komputerem postawionym za firewallem Freesco, korzystając z szyfrowanego tunelu na bazie OpenSSH/PuTTY

Cel: Uzyskanie bezpiecznego (i szybkiego) połączenia ze środowiska Windows do odległego serwera VNC, ulokowanego za routerem/firewallem (np. Freesco), na którym zainstalowano ssh.

Uzyskane rezultaty: bezpieczne połączenie do zdalnego pulpitu przy pomocy open source'owego VNC lub Tight VNC (które normalnie nie szyfrują transmisji, z wyjątkiem hasła). Efektem "ubocznym" były krótsze czasy odpowiedzi, ponieważ ssh dysponuje efektywną kompresją transmisji. Oprócz tego, na firewallu/routerze nie jest otwierany żaden inny port - tylko ssh. [Od tłumacza: Ostrożności nigdy nie za wiele, więc łopatologicznie dodam od siebie: NIE korzystamy tu z usługi forwardowania portów (47) dostępnej we Freesco: należy ją wyłączyć.]

Oprogramowanie: Server VNC lub Tight VNC na komputerze zdalnym oraz viewer na komputerze loklanym, PuTTY - klient ssh pod windows, serwer ssh na routerze/firewallu (jeśli używasz freesco, poszukaj najnowszego oprogramowania openSSH na www.FREESCOsoft.com).

Wersje programów i nazewnictwo:
1. Tight VNC jest kompatybilne z "normalnym" VNC, ale umożliwia oprócz tego kompresję obrazu do formatu jpg. Dostępne jest pod adresem http://www.tightvnc.com
2. Tunelowanie jest dostępne w PuTTY od wersji 0.52. 3. Na testowanym Freesco zainstalowano Open SSH w wersjach ssh 1.10 i sshd 1.42
3. W niniejszym opracowaniu 'viewer' oznacza zawsze komputer, z którego zarządzamy, a 'serwer' jest komputerem zdalnie sterowanym. Podkreślam to, ponieważ w Części B połączenie jest inicjowane w innym niż to bywa zwykle kierunku, co mogłoby prowadzić do nieporozumień.].

Wstęp:
VNC jest wspaniałym narzędziem, ale ma jedną wadę. Tylko informacje potrzebne do loginu przesyłane są siecią w postaci zaszyfrowanej. Dla wielu paranoików lub ludzi po prostu trzeźwo myślących jest to nie do przyjęcia. Niestety, zbyt często użytkownikom się wydaje, że dla przezwyciężenia tej niedogodności potrzebne jest oprogramowanie komercyjne. Czasami rzeczywiście może istnieć taka konieczność, ale w wielu przypadkach prosta procedura pozwoli na wykorzystanie wyłącznie darmowego oprogramowania typu open source. W moim przypadku chciałem podłączyć się z komputera windowsowego w domu poprzez internet do komputera w biurze, umieszczonego za routerem/firewallem FREESCO. Na Freesco (www.freesco.info) miałem już zainstalowane ssh. Wyglądało to tak:


Natomiast chciałem uzyskać coś takiego jak na rysunku poniżej, gdzie ssh stanowiłoby bezpieczny tunel, chroniący transmisję VNC przed wrogim otoczeniem sieci. Chciałem też, żeby tunel miał odpowiedni "dopalacz", przyspieszający transmisję:


Komputer docelowy w odległej sieci biurowej miał numer 192.168.1.4. Wariant pierwszy wykorzystywał usługę forwardowania portu 5900 (opcja 47) dostępnej we FREESCO. Połączenie takie nie było bezpieczne i wymagało otwarcia na routerze portu. Nie było też szybkie, chociaż na obu końcach miałem DSL.

Procedura:
Odległy serwer VNC ustaw na nasłuchu na porcie 5900 (standardowo).

Otwórz PuTTY, przejdź do Connection -> SSH ->Tunnels:


Wstaw port lokalny (Source) oraz zdalne IP komputera i jego port, na którym słucha serwer VNC. Kliknij 'Add':

Teraz przejdź do opcji SSH i uaktywnij wersję protokołu 2 oraz włącz kompresję (dzięki temu będziemy mieli większą prędkość przesyłu danych):

W tym momencie jesteśmy gotowi do uruchomienia sesji tunelowanej. Przejdź do 'Session' i wprowadź dane twojego serwera/firewalla (IP lub nazwa domeny) oraz port - domyślnie dla ssh jest to 22. PuTTY pozwala zapisać te wszystkie parametry: nadaj sesji nazwę i wciśnij 'Save':


Teraz kliknij 'Open' i zaloguj się do ssh jak zwykle:

Zostaniesz zapytany o klucz/hasło itd., ale nie będę tu dublować ssh-HOWTO, tłumacząc jak to działa - powinieneś wiedzieć, co masz robić.

Gdy już zalogujesz się do zdalnego serwera/firewalla, tunel już pracuje. [Pozostaw PuTTY pracujące w tle i] otwórz viewer VNC - nie będziesz już narażony na wścibstwo podglądaczy. Zauważ tylko, że teraz viewer będziesz musiał skierować nie na odległy serwer, ale na końcówkę tunelu po twojej stronie, czyli na localhost (127.0.0.1) i na port, podany jako "source" w konfiguracji PuTTY (w naszym przykładzie: 5905). Żeby to osiągnąć, w okienku adresu wpisujesz 'localhost:5' (numer portu minus 5900):

Zostaniesz poproszony o hasło - jak zwykle. Więc wpisz je...



...i baw się dobrze. Zminimalizuj jeszcze sesję PuTTY, żeby nie przeszkadzała :)
Jeśli nie zależy ci na ładnych widoczkach, wydusimy jeszcze z VNC maksymalne tempo pracy. [Ustawimy parametry kompresji jpg w VNC i zapiszemy je w pliku do dalszego wykorzystania. Robimy to tak: po nawiązaniu połaczenia klikamy w lewy górny róg okna sesji VNC i wchodzimy w 'Connection options':

Ustawiamy tu poziom kompresji i włączamy kompresję jpg - ja ustawiam obie na 9. Naciskamy OK, a następnie wchodzimy w menu jeszcze raz i wybieramy opcję zapisu parametrów połączenia w pliku, np. naszasesja.vnc. Teraz rozłączamy się, i robimy sobie ikonę skrótu do vncwiever.exe. Następnie w jej właświwościach, w linii poleceń dopisujemy na końcu parametr /config naszasesja.vnc. Teraz vncviewer odpalany tym skrótem będzie ładował adres połaczenia i ustawienia kompresji od razu przy starcie. Uwaga: przy zapisywaniu parametrów do pliku, można w nim też zapisać hasło - od ciebie zależy, czy będziesz tego chciał - jeśli ktoś dostanie w ręce plik naszasesja.vnc, mógłby zrobić z niego zły użytek.]

Jeśli bawiłeś się wcześniej czystym VNC, zauważysz teraz dodatkowe zwiększenie komfortu pracy z racji kompresji oferowanej przez ssh. Przy DSL pracuje się prawie w czasie rzeczywistym.

Miłej zabawy :)

Chciałbym jeszcze zaznaczyć, że wyżej opisany efekt można osiągnąć przy pomocy innych klientów ssh. Jeśli wolisz inne oprogramowanie - zapoznaj się z dokumentacją, gdzie opisane będą opcje tunelowania.

Uwaga: Metoda opisana powyżej działała dobrze u autora. Jest jednak prezentowana bez gwarancji. Jeśli znajdziesz w niniejszym HOWTO jakieś uchybienia, proszę napisz pod adres v@drvandv.com. Nie przysyłaj jednak pytań technicznych. Zrobiłem to tak, jak opisałem, i nie obchodzi mnie, że u ciebie to nie działa. Swoje problemy rozwiązuj sam. Starałem się, aby opis był jak najprostszy, w czym pomogły mi moje własne zmagania. Niniejsze HOWTO może być rozpowszechniane z podaniem odnośnikia do źródeł.

Odnośnik do oryginału: http://www.freesco.pl/html/modules.php?name=News&file=article&sid=52