Technologia NX w praktyce
Co to jest NX? To technologia zdalnego dostępu do graficznego pulpitu, której autorem jest Gian Filippo Pinzari, i która jest obecnie rozwijana w jego firmie NoMachine. NX jest rozwiązaniem komercyjnym, jednak dzięki udostępnieniu newralgicznych fragmentów kodu na licencji GNU GPL, utworzono wolną implementację o nazwie FreeNX.
Zalety NX to:
- dobra kompresja i cache’owanie danych, pozwalające pracować nawet na łączach modemowych, przy transferach 56,6 kb/s
- wykorzystanie tunelu SSH i pary kluczy prywatny-publiczny podczas logowania i w trakcie sesji
- możliwość uruchomienia całego pulpitu lub pojedynczej aplikacji
- wydajne tunelowanie sesji RDP (zdalny pulpit Windows) i VNC
Podczas logowania klient NX łączy się z serwerem SSH, korzystając z konta użytkownika systemowego nx. Odbywa się to za pomocą pary kluczy. Po chwili następuje zalogowanie właściwego użytkownika, któremu zostaje udostępniona sesja X. Prosto i bezpiecznie.
Instalacja serwera na CentOS
W przypadku systemu CentOS, odpowiednie pakiety mamy dostępne w repo i instalujemy je poleceniem
# yum install nx freenx
Po zainstalowaniu dodajemy do serwera użytkowników, którym chcemy umożliwić dostęp via NX, np.
# nxserver --adduser uzytkowniknx
i ustawić im hasła
# nxserver --passwd uzytkowniknx
Tu musimy się na chwilę zatrzymać przy kwestii autoryzacji dostępu. Otóż może okazać się, że nasz użytkownik będzie mógł się zalogować także z innym hasłem, konkretnie tym używanym normalnie w systemie. Co gorsze, inni użytkownicy niż przed chwilą dodani do serwera, mogą też być autoryzowani po podaniu swoich linuksowych haseł. Aby temu zapobiec, przygotowujemy plik konfiguracyjny
# cd /etc/nxserver; cp node.conf.sample node.conf
i zmieniamy wpis w node.conf:
# This adds SSH to the possible authentication methods. For it to work sshd
# must be set up at localhost accepting password authentication.
ENABLE_SSH_AUTHENTICATION="0"
Odtąd serwer NX będzie autoryzował użytkowników na podstawie własnej bazy haseł.
Na koniec, jeżeli w konfiguracji daemona SSH korzystaliśmy z opcji AllowUsers, należy dopisać przy tej opcji w /etc/ssh/sshd_config użytkownika nx i tych, którzy mają mieć możliwość logowania via NX. U nas wyglądałoby to tak:
AllowUsers nx uzytkowniknx
Serwer uruchamiamy poleceniem
# nxserver --start
aczkolwiek możliwe, że uruchomi się automatycznie. Nie ma też chyba potrzeby dodawać go do usług na żadnym poziomie uruchamiania.
Przygotowanie klienta
Jeżeli klienta NX nie znajdziemy w repo naszej dystrybucji (nie znalazłem go w Debianie, ale w Gentoo był), możemy go pobrać ze strony producenta. Znajdziemy tam również wersje dla Windows, Solaris i MacOS X.
Kopiujemy sobie klucz prywatny z serwera, który to klucz znajduje się prawdopodobnie w pliku /etc/nxserver/client.id_dsa.key (uwaga: prawo do czytania domyślnie ma tylko root). Najszybciej zrobić to przez SCP:
$ scp root@nasz.serwer:/etc/nxserver/client.id_dsa.key ./
Po uruchomieniu nxclient, importujemy klucz i konfigurujemy pozostałe opcje. Tu odsyłam na Google, bowiem nie chce mi się przygotowywać screenshotów i omawiać wszystkich zakładek.
W przypadku problemów z połączeniem możemy spróbować połączyć się z użytkownikiem systemowym przez SSH:
$ ssh -i client.id_dsa.key nx@nasz.serwer
HELLO NXSERVER - Version 1.5.0-60 OS (GPL)
NX> 105
Wpisanie bye zamknie sesję.
Problemy
Napotkałem przede wszystkim na dwa problemy podczas używania NX. Po pierwsze, nigdy nie udało mi się zalogować na konsolę i nie mam pojęcia, jak miałaby ona wyglądać (xterm czy co?). Po drugie, w takich sytuacjach klient po prostu się zamyka, a na serwerze, po wydaniu polecenia
# nxserver --list
okazuje się, że wiszą jakieś sesje, które trzeba ręcznie usuwać.
Powyższe niedogodności nie zmieniają jednak faktu, że NX jest funkcjonalnym i wydajnym narzędziem zdalnego dostępu do pulpitu czy też pojedynczych aplikacji w trybie graficznym.
Dodano: 30 lipca 2007 @ 15:24
No i proszę, jednak da się zarządzać sesjami od strony klienta. Wystarczyło zajrzeć do menu KDE, gdzie instalator dodał potrzebne linki. Otóż sesjami zarządzamy przez nxclient --admin. Ponadto możemy posłużyć się kreatorem podczas tworzenia nowej sesji: nxclient --wizard.
