Néhány felhasználó viszonylag olcsó Windows VPS-t bérel az távoli asztali szolgáltatások indításához. Ugyanezt megtehetjük Linuxon is, anélkül, hogy saját hardvert kellene elhelyezni egy adatközpontban vagy bérelni egy dedikált szervert. Egyeseknek a megszokott grafikus felületre van szükségük teszteléshez és fejlesztéshez, vagy távoli asztalra széles sávú kapcsolattal mobil eszközök használatához. Számos alkalmazási lehetőség létezik a Remote FrameBuffer (RFB) protokollra épülő Virtual Network Computing (VNC) rendszerre. Egy rövid cikkben bemutatjuk, hogyan állítható be egy virtuális gépen bármely hipervizorral.
Tartalomjegyzék:
VNC szerver kiválasztása
A VNC szolgáltatás integrálható a virtualizációs rendszerbe, miközben a hipervizor összeköti azt az emulált eszközökkel, így nincs szükség további beállításokra. Ez a lehetőség jelentős többletköltségekkel jár, és nem minden szolgáltató támogatja — még egy kevésbé erőforrás-igényes megvalósítás esetén is, amikor a valódi grafikus eszköz emulációja helyett egy egyszerűsített absztrakciót (framebuffer) kap a virtuális gép. Néha a VNC-szerver egy futó X-szerverhez kötődik, de ez a módszer inkább a fizikai géphez való hozzáférésre alkalmas, mivel virtuális gépen műszaki nehézségeket okoz. A legegyszerűbb, ha a beépített X-szerverrel együtt telepítjük a VNC-szervert. Ez nem igényli fizikai eszközök (video adapter, billentyűzet és egér) meglétét vagy azok hipervizorral való emulációját, így bármilyen típusú VPS-hez alkalmas.
Telepítés és beállítás
Szükségünk lesz egy Ubuntu Server 18.04 LTS virtuális gépre az alapértelmezett konfigurációval. Ennek a disztribúciónak a standard tárolóiban több VNC szerver található: , , és egyebek. A TigerVNC-re esett a választásunk, amely a már nem támogatott TightVNC aktuális forkja. Más szerverek beállítása hasonló módon történik. Különböző asztali környezetet is választhatunk: véleményünk szerint az XFCE az optimális választás, mivel viszonylag alacsony a számítógépes erőforrásigénye. Aki szeretné, más DE-t vagy WM-t is telepíthet: ez teljes mértékben a személyes preferenciáktól függ, azonban a szoftverválasztás közvetlenül befolyásolja a memória és a processzor magok igényét.

Az asztali környezet telepítése az összes függőséggel a következő parancs futtatásával történik:
sudo apt-get install xfce4 xfce4-goodies xorg dbus-x11 x11-xserver-utilsEzután szükséges a VNC szerver telepítése:
sudo apt-get install tigervnc-standalone-server tigervnc-commonRossz ötlet a rendszergazda jogokkal indítani. Hozzunk létre egy felhasználót és csoportot:
sudo adduser vnc 
Adjuk hozzá a felhasználót a sudo csoporthoz, hogy el tudja látni az adminisztrációval kapcsolatos feladatokat. Ha nincs szükség erre, ez a lépés kihagyható:
sudo gpasswd -a vnc sudoA következő lépésben el kell indítani a VNC szervert vnc felhasználó jogokkal, hogy biztonságos jelszót és konfigurációs fájlokat hozhassunk létre a ~/.vnc/ könyvtárban. A jelszó hossza 6 és 8 karakter között lehet (a felesleges karakterek levágásra kerülnek). Szükség esetén megadható egy megtekintési jelszó is, ami csak a billentyűzethez és az egérhez való hozzáférés nélkül működik. A következő parancsokat a vnc felhasználó nevében kell futtatni:
su - vnc
vncserver -localhost no 
Alapértelmezés szerint az RFB protokoll a TCP-portok 5900-tól 5906-ig terjedő tartományát használja — ezeket a megjelenítési portoknak nevezik, és mindegyik az X-szerver egyik képernyőjéhez tartozik. Ezek a portok a :0-tól :6-ig terjednek. A általunk indított VNC szerver példány a 5901-es portot hallgatja (képernyő :1). Más példányok más portokon :2, :3 stb. futhatnak. További beállítás előtt le kell állítani a szervert:
vncserver -kill :1A parancsnak körülbelül a következő üzenetet kell kiadnia: „Killing Xtigervnc process ID 18105… success!”.
A TigerVNC indításakor a ~/.vnc/xstartup szkriptet hajtja végre a konfigurációs paraméterek beállításához. Hozzunk létre saját szkriptet, először készítsünk egy biztonsági másolatot a meglévőről, ha van:
mv ~/.vnc/xstartup ~/.vnc/xstartup.b
nano ~/.vnc/xstartupAz XFCE asztali környezet munkamenete a következő xstartup szkripttel indítható:
#!/bin/bash
unset SESSION_MANAGER
unset DBUS_SESSION_BUS_ADDRESS
xrdb $HOME/.Xresources
exec /usr/bin/startxfce4 &Az xrdb parancs szükséges ahhoz, hogy a VNC rendszer olvassa a .Xresources fájlt a felhasználói könyvtárban. Itt a felhasználó különböző paramétereket állíthat be a grafikus asztalhoz: betűk megjelenítése, terminál színek, kurzortémák stb. A szkriptet futtathatóvá kell tenni:
chmod 755 ~\/ .vnc\/ xstartupEzzel befejeződött a VNC szerver beállítása. Ha a vncserver -localhost no parancsot futtatjuk (a vnc felhasználó nevében), a megadott jelszóval csatlakozva a következőképpen nézhetjük meg:

Szolgáltatás indítása a systemd-n keresztül
A VNC szerver kézi indítása nem igazán ideális a termeléshez, ezért beállítunk egy rendszer szolgáltatást. A parancsokat root néven hajtjuk végre (használjuk a sudot). Először létrehozunk egy új egységfájlt a szerverünkhöz:
sudo nano \/etc\/systemd\/system\/vncserver@.serviceAz @ szimbólum a névben lehetővé teszi, hogy átadjuk az érvet a szolgáltatás konfigurálásához. A mi esetünkben ez a VNC kijelző portját adja meg. Az egységfájl több szakaszból áll:
[Unit]
Description=TigerVNC server
After=syslog.target network.target
[Service]
Type=simple
User=vnc
Group=vnc
WorkingDirectory=\/home\/vnc
PIDFile=\/home\/vnc\/.vnc\/%H:%i.pid
ExecStartPre=-\/usr\/bin\/vncserver -kill :%i > \/dev\/null 2>&1
ExecStart=\/usr\/bin\/vncserver -depth 24 -geometry 1280x960 :%i
ExecStop=\/usr\/bin\/vncserver -kill :%i
[Install]
WantedBy=multi-user.targetEzután értesítenünk kell a systemd-t az új fájl felfedezéséről és aktiválni kell:
sudo systemctl daemon-reload
sudo systemctl enable vncserver@1.serviceAz 1-es szám a névben a képernyő számát határozza meg.
Leállítjuk a VNC szervert, szolgáltatásként indítjuk, és ellenőrizzük az állapotot:
# от имени пользователя vnc
vncserver -kill :1# с привилегиями суперпользователя
sudo systemctl start vncserver@1
sudo systemctl status vncserver@1Ha a szolgáltatás működik, akkor körülbelül ilyen eredményt kell kapnunk.

Kapcsolódás az asztalhoz
A mi konfigurációnk nem használ titkosítást, így a hálózati csomagokat a rosszindulatú hackerek elfoghatják. Továbbá a VNC szerverek gyakran , így nem ajánlott őket közvetlen internetes hozzáféréshez nyitni. Biztonságos csatlakozáshoz a helyi számítógépen SSH alagútba kell csomagolni a forgalmat, majd beállítani a VNC klienst. Windows alatt grafikus SSH klienst (például PuTTY) használhatunk. A TigerVNC a szerveren csak a localhost-ra figyel, és közvetlenül nem elérhető a nyilvános hálózatokból:
sudo netstat -ap |more 
Linux, FreeBSD, OS X és más UNIX-szerű operációs rendszerek alatt az alagút a kliens számítógépről az ssh segédprogram segítségével készül (a VNC szerveren a sshd-nek futnia kell):
ssh -L 5901:127.0.0.1:5901 -C -N -l vnc vnc_server_ipA -L option binds the remote connection port 5901 to port 5901 on localhost. The -C option enables compression, while -N tells the ssh utility that there's no need to execute a remote command. The -l option specifies the login for remote system access.
After setting up the tunnel on the local computer, you need to run the VNC client and connect to the host 127.0.0.1:5901 (localhost:5901), using the password previously set for accessing the VNC server. Now we can securely interact through the encrypted tunnel with the XFCE desktop environment on the VPS. The screenshot in the terminal emulator runs the top utility to show negligible resource consumption by the virtual machine. Everything else will depend on user applications.

You can install and configure a VNC server on Linux on almost any VPS. Expensive and resource-intensive configurations with video adapter emulation or purchasing commercial software licenses are not necessary for this. Besides the system service option we discussed, there are others: starting in daemon mode (via /etc/rc.local) at system boot or on demand via inetd. The latter is interesting for creating multi-user configurations. The internet superserver will start the VNC server and connect it with a client, and the VNC server will create a new screen and start a session. For authentication within it, you can use a graphical display manager (for example, ), and after the client disconnects, the session will be closed and all running programs on the screen will be terminated.
Forrás: habr.com
