Kterak na TightVNC a SSH tunely

Jelikož se poněkud živelně rozšířilo používání VNC a spolu s tím i mnoho nesprávných postupů s negativnímí vedlejšími efekty, došel jsem k závěru, že je potřeba vydat oficiální pokyny co, jak a proč dělat. Text je z valné části určen pro neinformatiky v našich řadách a snaží se věci nějak popsat bez použití adekvátních termínů a optimální exaktnosti - takže kolegové informatici mne omluví a přeskočí na praktický popis vytvoření spojení.

Nejprve malý slovníček:

TightVNC

Virtual Network Computing projekt, zaměřený na poskytnutí vzdaleného přístupu ke grafickému rozhraní PC přes počítačovou síť. Tight VNC implementuje chytrý protokol, který umí obrazová data komprimovat, takže stačí pomalejší připojení a přesto se dá uspokojivě pracovat. Důsledkem jsou o něco zvýšené nároky na výpočetní čas stroje, na kterém VNC server běží.

VNC server

Program, čekající po svém spuštění na cílovém stroji a zpřístupňující ho uživateli.

VNC viewer (klient)

Program, s jehož pomocí se připojujete k VNC serveru např. z Windows (v našem případě).

OpenSSH

Produkt, zajišťující šifrovaný přístup k shellu operačního systému přes počítačovou síť. Opět má dvě části ssh klienta (Secure Shell Klient nebo třeba Putty) a ssh server (ten běží na našich serverech). SSH klient kromě zpřístupnění Stellu umí také vytvářet SSH tunely.

Port

Na většině serverů (čti počítačů, poskytujících nějaké služby) běží více služeb najednou. Aby bylo možno říci, se kterou chceme komunikovat, jsou kromě adresy stroje (ufal.mff.cuni.cz) rozlišeny ještě číslem portu. Podle tohoto čísla operační systém odlišuje jednotlivá spojení. Například Webserver používá číslo portu 80, ssh server 22 a podobne.

SSH tunel

Sifrovany kanálu mezi dvěma porty, obvykle mezi dvěma různými počítači.

Loopback

Počítač připojený k Internetu vidí dvě počítačové sítě jednou z nich je Internet a druhou je loopback. Je to jakási malá virtuální síť, na které je jen on sám. Některé programy přes tuto síť spolu komunikují a jejich komunikace je přitom z Internetu neviditelná.

Co je při užívání VNC vhodné a nevhodné

TightVNC je distribuce, která prozatím spojení neumí šifrovat. Jiné (komerční) to umí. To znamená, že pokud si někde spustíte vncserver, připojíte se na něj a pak v okně VNC klienta např. vyťukáte heslo do ssh v něm spuštěném, posíláte ho po síti volně čitelné a ohrožujete tak svůj účet a současně data vašich kolegů.

Stejne nevhodne je, pokud nastavíte pro vncserver heslo (příkazem vncpasswd) na stejné heslo, jaké užíváte k přístupu do naší počítačové sítě. Upozorňuji, že TightVNC navíc umí maximálně 8-mi znaková hesla, zbylé znaky ignoruje. Doporučuji každopádně užívat "one time"?hesla ?- pro každé spuštění vnc serveru si nějaké na chvíli vymyslet. Příkladem použitelného hesla je: lD.93,Ma

Při spuštění VNC serveru je třeba počítat s tím, že zatěžujete stroj, na který se takto připojujete spouští se totiž nejen komunikační část, ale také grafický server, který provádí zobrazení aplikací. Proto je naprosto nevhodné se takto připojovat na výkonné stroje, které jsou určené na počítání!

Proto, mame vyhrazen jeden stroj, kde budeme VNC připojení používat (blackbird). Dále můžete k tomuto účelu využívat své pracovní stanice s linuxem, případně stanice kolegů, kteří vám to explicitně dovolí. Servery do tohoto seznamu rozhodně nepatří.

Pokud jde o připojování z linuxu na linux přes VNC, považuji to v rámci budovy za nesmysl, jelikož pro tento účel je zcela optimální tunelování grafiky přes ssh spojení jako takové. Pokud máte problémy, použijte ssh -Y "stroj".

Zde uvedu správný postup pro připojení k VNC serveru přes ssh. Tento postup je použitelný také pro SYNERGY a veskeré podobné aplikace. Ve všech případech, kdy aplikace sama neumí šifrovat a jsou přenášena citlivá data (což je skorovždy), je vhodné vytvořit SSH tunel a data posílat skrz něj.

NOVINKY:

Každý uživatel VNC bude zařazen do skupiny vncusers a dostane přiděleno unikátní číslo, ze kterého se odvodí číslo jím používaného portu. Takto předejdeme kolizím a nebudete must zjišťovat, jaký port vám byl přidělen. Dále budu toto číslo nazývat "vnc_number". Jejich seznam je ulozen v /home/ETC/vnc_numbers (pro pripad, ze sve cislo zapomenete).

TightVNC + ssh howto

Nejprve je třeba připojit se na blackbird.ms.mff.cuni.cz (gateway) a vytvořit SSH tunel pro přenos dat.

1) spusťte Putty a vyberte category: Connection->Ssh->Tunnels

a. Source port: 5900 + vnc_number
[ konstrukce čísla portu je vždy numericky - výpočtem: 5900 + vnc_number ]

b. Destination port: 127.0.0.1:5900 + vnc_number (např. 5901)
Nechte dole zatrženo local a klikněte na Add. Po připojení bude výtvořen SSH tunel mezi portem 5900+vnc_number na loopbacku serveru a stejnym portem na loopbacku stroje, ze kterého se přihlašujete.

2) nyní vyberte category: Session

Připojte se na stroj "blackbird.ms.mff.cuni.cz", port 22 (port lze nastavit i vybráním protokolu ssh)
A spusťte startovací skript: /opt/vnc/startvnc :"vnc_number" (nebo /opt/vnc/vnc-autostart)
...ten vyzve k zadani hesla ke spouštěné službě VNC a spustí vncserver.
VNC server je spuštěn na portu 5900+vnc_number loopbacku, takže zvenku je neviditelný. Nicméně tento port je protunelován až na lokální port vašeho počítače. Celý kanál je šifrovaný a aktivuje se teprve po vašem nalogování přes ssh na blackbird. Z toho také plyne, že toto spojení musí být otevřeno po celou dobu práce ve VNC klientovi.

  Pokud máte vnc_number přiděleno a tedy i uvedeno v /home/ETC/vnc_numbers, je možné použít příkaz:

 /opt/vnc/vnc-autostart

3) spusťte TightVNC klienta na svém počítači a připojte se na adresu:

127.0.0.1:5900+vnc_number
Zde se napojíme na lokální port, který je napojen na VNC server přes SSH tunnel.

3) zadejte heslo a dale to již znáte sami.

4) po ukončení práce lze vnc server zastavit: /opt/vnc/stopvnc :"vnc_number"

  Pokud máte vnc_number přiděleno a tedy i uvedeno v /home/ETC/vnc_numbers, je možné použít příkaz:

  /opt/vnc/vnc-autostop

5) chcete-li použít standardní SecureShell Klient, který instaluji všude, tunel v něm nastavíte stejně snadno.

Otevřete ssh, v menu najděte Edit->Settings
Dále vyberte Tunneling a v záložce Outgoing vyplňte Listen Port a Destination Port (hodnota bude 5900+vnc_number). Po uložení změn se připojte na gateway a dál je již vše identické.