Friday, September 22, 2006

Accessing remote Linux desktop from Windows over SSH

Линукс десктопруу гаднаас хандах шаардлага гарлаа. Тэр нь офисоос маань 1км цаана байгаа серверийн өрөөрүү гүйхгүй гэсэндээ л тэр шүү дээ. "google is your best friend!" гэж Nuunee-гийн хэлснээр баахан google-длээ. Ер нь өөрт тулгарсан асуудлын 90%-г google-с хайж шийддэг болохоор нэг ч их бэрхшээлтэй ажил биш байлаа. Мэдээж энэ баахан эмх замбараагүй мэдээллийг буцааж эвлүүлж хэрэгтэй зүйлээ босгож авах гэдэг л их цаг зарсан ажил байна. Гэхдээ зүгээрээ тэр хирээрээ шинэ сонин зүйлсийг сурах болно...

За гол асуудалдаа оръё. Эхлээд "X11 Forwarding"-г туршаад гацчихсан тул болиод VNC-г туршиж үзлээ. Нилээд нухсаны эцэст VNC болсон, энэ удаад түрүүн гацсан алдаагаа ч олов. Ингээд дээрх 2 аргаар линукс десктопруу гаднаас хандах аргыг доор бичлээ.

Windows дээр ажилладаг хэд хэдэн ssh client программ байдаг бөгөөд хамгийн өргөн хэрэглэгддэг Putty ашиглан дараах байдлаар Линукс десктопруу хандана.

1. X11 Forwaring - буюу X11 tunneling ч гэж нэрлэгддэг. Энгийн tunnel-тэй адил бөгөөд ганц ялгаа нь тухайн машинруу ssh-р логин хийж ороход ssh таны өмнөөс DISPLAY хувьсагчийн утгыг оноож, таны сууж байгаа машинруу чинь зааж өгнө. Таны PC дээр Putty(X11 tunnel-г дэмждэг байх ёстой), мөн хүлээж авсан мэдээллийг танд дэлгэцэнд харуулахын тулд X Server суусан байх хэрэгтэй. Windows platform дээр ажилладаг X-Win32 программыг ашиглаж болно. HostА->HostB (A-с B-рүү) хандаж байна гэж үзвэл.


1.1 X-Win32-г тохируулах - "Configuration/Security" ороод HostB-г зөвшөөрч өгөөд X-Win32 серверийг ажиллуулж орхино.

1.2 Putty-г тохируулах - "Session/Host name" дээр HostB-г бичнэ. "Connection/SSH/Tunnels" эсвэл "Connection/SSH/X11" дээр "Enable X11 forwarding" хэсгийг чагтлан, "X Display location" дээр "IP address:display" гэсэн форматаар "HostА:0" гэж бичнэ. Ихэнх тохиолдолд display=0 утгыг авдаг тул та ямар нэг тохиргоог өөрчлөөгүй бол энэ байдлаар ажиллах ёстой.

1.3 Одоо Putty ашиглан ssh-r HostB-рүү хандан холбогдоно. Тохиргоо зөв байгаа эсэхийг шалгахын тулд ямар нэг X11 application, жишээ болгож xclock-г ажиллуулъя. (Ихэвчлэн /usr/X11R6/bin дотор байрлана)

# xclock &

Дэлгэцэн дээр жижиг цонхонд цаг гарч ирэх ёстой. Хэрэв гарч ирэхгүй бол DISPLAY хувьсагчийн утгыг шалгаж үзээрэй.

# echo $DISPLAY

Хэрэв энэ утга "HostA:0.0" биш бол гараар утгыг оноож өгнө. Миний хувьд энэ хэсэг дээр нилээд цаг алдсан ба DISPLAY хувьсагчийн утгыг дараах байдлаар онооно:

# export DISPLAY=HostA:0.0

За одоо ямар ч байсан цаг гарч ирсэн гэж найдъя.

1.4 HostB ямар төрлийн windows manager дэмждэг вэ?

Gnome бол :
# gnome-session

KDE бол :
# startkde &

командыг өгөхөд... EVRICA!!! ... танил дэлгэц чинь гарч ирнэ.

Дээрхээс гадна icewm-session, x-window-manager, twm командуулыг өгч бусад wm-үүдийг туршаад үзээрэй.


2. VNC - Хандах гэж байгаа машин дээр VNC Cервер суусан байх ёстой. Мөн PC дээрээ VNCViewer суулгана.

2.1 VNC Серверийг ажиллуулахын тулд хамгийн багадаа нэг хэрэглэгч нэмэх хэрэгтэй. Тохиргоог /etc/sysconfig/vncservers дотор дараах байдлаар хийнэ.

VNCSERVERS="1:baynaa"
VNCSERVERARGS[1]="-geometry 1024x768 -depth 16"

VNC Cервер энд зааж өгсөн тохиолдол тус бүрт өөр өөр порт дээр сонсох бөгөөд манай тохиолдолд 5900+1 буюу 5901-р порт дээр холбогдоно гэсэн үг юм.

2.2 VNC Cерверрүү холбогдох user shell-рүү орон доорх командыг өгч нууц үгийг идэвхжүүлнэ.

# vncpasswd

2.3 VNC Серверийг ажиллуулахад тухайн хэрэглэгчийн хувьд $HOME/.vnc/xstartup файл үүсэх бөгөөд энэ файл дотор десктоп дээр ажиллах программыг тохируулна.

#!/bin/sh
# Uncomment the following two lines for normal desktop:
unset SESSION_MANAGER
exec /etc/X11/xinit/xinitrc
[ -x /etc/vnc/xstartup ] && exec /etc/vnc/xstartup
[ -r $HOME/.Xresources ] && xrdb $HOME/.Xresources
xsetroot -solid grey
vncconfig -iconic &
xterm -geometry 80x24+10+10 -ls -title "$VNCDESKTOP Desktop" &
twm &


Хамгийн сүүлийн мөрний оронд өөрийн тохирох WM-г сольж бичнэ. Gnome бол gnome-session гэж бичнэ.

2.4 VNCViewer программыг ажиллуулан "server" дээр "localhost:5900" гэж бичин холбогдоно. Одоо танаас нууц үгийг чинь асуух болно.

... EVRICA!!! ... танил дэлгэц чинь гарч ирнэ.


PS: Дээр дурдсан жишээнээс гадна SSH Tunnel-г ашиглан TCP/IP протоколоор ажилладаг бүх төрлийн service-үүдрүү хандаж болно. Жишээ нь гаднаас хандалтгүй серверээс мэйлээ шалгах... Хамгийн гол нь бүх траффик SSH-р кодлогдон дамжих тул нууцлал хамгаалал сайтай.
Та нар ч гэсэн туршаад үзээрэй.