Nogle brugere lejer relativt billige VPS med Windows til at køre en tjeneste til fjernarbejdsbord. Det samme kan gøres på Linux uden at skulle placere eget hardware i et datacenter eller leje en dedikeret server. Nogle har brug for et velkendt grafisk miljø til test og udvikling eller et fjernarbejdsbord med høj båndbredde til mobilarbejde. Der er mange anvendelsesmuligheder for Virtual Network Computing (VNC), der er baseret på protokol Remote FrameBuffer (RFB). I denne korte artikel vil vi vise, hvordan man konfigurerer det på en virtuel maskine med enhver hypervisor.
Indholdsfortegnelse:
Valg af VNC-server
VNC-tjenesten kan være indbygget i virtualisering systemet, hvor hypervisoren forbinder den til de emulerede enheder, og der kræves ikke yderligere konfiguration. Denne mulighed indebærer betydelige omkostninger og understøttes ikke af alle udbydere — selv i en mindre ressourcekrævende implementering, hvor der i stedet for at emulere en rigtig grafisk enhed gives en forenklet abstraktion (framebuffer) til den virtuelle maskine. Nogle gange knyttes VNC-serveren til en kørende X-server, men denne metode er mere egnet til adgang til fysiske maskiner, og på virtuelle maskiner skaber den en række tekniske udfordringer. Det er enklest at installere en VNC-server med en indbygget X-server. Den kræver ikke tilstedeværelsen af fysiske enheder (grafikkort, tastatur og mus) eller deres emulering via hypervisoren; og derfor passer den til enhver type VPS.
Installation og konfiguration
Vi har brug for en virtuel maskine med Ubuntu Server 18.04 LTS i standardkonfiguration. I standardarkiverne for denne distribution er der flere VNC-servere: , , og andre. Vi valgte TigerVNC — den aktuelle fork af den ikke-understøttede TightVNC. Konfigurationen af de andre servere udføres på en lignende måde. Man skal også vælge et skrivebordsmiljø: efter vores mening vil XFCE være den optimale mulighed på grund af de relativt lave krav til computerressourcer. De interesserede kan installere en anden DE eller WM: det afhænger helt af personlige præferencer, men valget af software påvirker direkte behovet for RAM og beregningskerner.

Installationen af desktopmiljøet med alle afhængigheder udføres med følgende kommando:
sudo apt-get install xfce4 xfce4-goodies xorg dbus-x11 x11-xserver-utilsDerefter skal du installere VNC-serveren:
sudo apt-get install tigervnc-standalone-server tigervnc-commonAt køre den med superbrugerrettigheder er en dårlig idé. Opret en bruger og en gruppe:
sudo adduser vnc 
Lad os tilføje brugeren til sudo-gruppen, så han kan løse administrativt relaterede opgaver. Hvis der ikke er behov for det, kan dette trin springes over:
sudo gpasswd -a vnc sudoNæste skridt er at starte VNC-serveren med vnc-brugerens privilegier for at oprette en sikker adgangskode og konfigurationsfiler i mappen ~/.vnc/. Adgangskodens længde kan være mellem 6 og 8 tegn (ekstra trimmes). Om nødvendigt kan der også angives en adgangskode kun til visning, det vil sige uden adgang til tastatur og mus. Følgende kommandoer udføres på vegne af brugeren vnc:
su - vnc
vncserver -localhost no 
Som standard bruger RFB-protokollen et interval af TCP-porte fra 5900 til 5906 — dette er de såkaldte display-porte, hvor hver svarer til en X-server-skærm. Portene er forbundet med skærme fra :0 til :6. Den VNC-server, vi har startet, lytter på port 5901 (skærm :1). Andre instanser kan køre på andre porte med skærme :2, :3 osv. Før vi fortsætter med konfigurationen, skal vi stoppe serveren:
vncserver -kill :1Kommandoen skal vise en besked som: «Killer Xtigervnc process ID 18105… success!».
Når TigerVNC startes, udfører den scriptet ~/.vnc/xstartup for at konfigurere indstillingerne. Lad os oprette vores eget script og skrive en backup af det eksisterende, hvis det findes:
mv ~/.vnc/xstartup ~/.vnc/xstartup.b
nano ~/.vnc/xstartupXFCE desktop-miljøsessionen startes med følgende xstartup-script:
#!/bin/bash
unset SESSION_MANAGER
unset DBUS_SESSION_BUS_ADDRESS
xrdb $HOME/.Xresources
exec /usr/bin/startxfce4 &Kommandoen xrdb er nødvendig for, at VNC-systemet kan læse filen .Xresources i hjemmebiblioteket. Her kan brugeren definere forskellige indstillinger for den grafiske arbejdsstation: skriftrendering, terminalfarver, markørtemaer osv. Scriptet skal gøres udførbart:
chmod 755 ~/.vnc/xstartupKonfigurationen af VNC-serveren er nu afsluttet. Hvis du starter den med kommandoen vncserver -localhost no (på vegne af brugeren vnc), kan du forbinde med den adgangskode, der blev angivet tidligere, og se følgende billede:

Start af tjenesten via systemd
Manuel start af VNC-serveren er ikke velegnet til produktionsbrug, så vi vil konfigurere en systemtjeneste. Kommandoerne køres som root (vi bruger sudo). Først opretter vi en ny enhedsfil til vores server:
sudo nano /etc/systemd/system/vncserver@.serviceSymbolet @ i navnet gør det muligt at sende et argument til konfigurationen af tjenesten. I vores tilfælde angiver det portnummeret for VNC-displayet. Enhedsfilen består af flere sektioner:
[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.targetDerefter skal vi informere systemd om, at den nye fil er tilgængelig og aktivere den:
sudo systemctl daemon-reload
sudo systemctl enable vncserver@1.serviceTallet 1 i navnet angiver skærmnummeret.
Vi stopper VNC-serveren, starter den som en tjeneste og tjekker status:
# от имени пользователя vnc
vncserver -kill :1# с привилегиями суперпользователя
sudo systemctl start vncserver@1
sudo systemctl status vncserver@1Hvis tjenesten kører, skal vi få et resultat, der ligner dette.

Forbindelse til arbejdsbordet
Vores konfiguration bruger ikke kryptering, så netværkspakker kan blive opsnappet af ondsindede aktører. Desuden findes der ofte , så det er ikke sikkert at åbne dem for adgang fra internettet. For sikker forbindelse på den lokale computer skal trafik pakkes i en SSH-tunnel, og derefter skal VNC-klienten konfigureres. På Windows kan man bruge en grafisk SSH-klient (for eksempel PuTTY). For at sikre, at TigerVNC kun lytter på localhost og ikke er tilgængelig direkte fra offentlige netværk:
sudo netstat -ap |more 
I Linux, FreeBSD, OS X og andre UNIX-lignende OS'er laves tunnelen fra klientcomputeren ved hjælp af ssh-værktøjet (sshd skal være aktiv på VNC-serveren):
ssh -L 5901:127.0.0.1:5901 -C -N -l vnc vnc_server_ipOption -L binder port 5901 for den fjerne forbindelse til port 5901 på localhost. Option -C aktiverer komprimering, og -N fortæller ssh-værktøjet, at der ikke er behov for at udføre en fjernkommando. Option -l angiver login for den fjerne adgang.
Når tunnelen er konfigureret på den lokale computer, skal VNC-klienten startes, og der skal oprettes forbindelse til værten 127.0.0.1:5901 (localhost:5901) ved hjælp af den tidligere angivne adgangskode til VNC-serveren. Nu kan vi sikkert interagere gennem en krypteret tunnel med XFCE-skrivebordsgrænsefladen på VPS. På skærmbilledet i terminalemulatoren kører værktøjet top for at vise det begrænsede ressourceforbrug fra den virtuelle maskine. Alt derfra afhænger af brugerapplikationerne.

Det er muligt at installere og konfigurere en VNC-server i Linux på næsten enhver VPS. Det kræver ikke dyre og ressourcekrævende konfigurationer med videoadapteremulering eller køb af kommercielle licenser til software. Udover den systemtjeneste vi har set på, findes der andre muligheder: at starte i dæmonmodus (gennem /etc/rc.local) ved systemstart eller efter behov via inetd. Sidstnævnte er interessant til oprettelse af flerbrugerkonfigurationer. Internet-superserveren vil starte VNC-serveren og forbinde den til klienten, og VNC-serveren opretter en ny skærm og starter en session. Til autentificering inden for den kan man bruge en grafisk display manager (for eksempel, ), og når klienten logger af, vil sessionen blive lukket, og alle programmer, der kørte på skærmen, vil blive afsluttet.
Kilde: habr.com
