gebruik je Apache Guacamole om een VNC Verbinding te maken

Onlangs leerde je hoe je Apache Guacamole installeert en gebruikt om een SSH verbinding te maken op een Rocky Linux 8 gebaseerde server. Een van de meest populaire toepassingen van Guacamole is het gebruik als VNC (Virtual Network Computing) kijker. Met VNC kun je van overal je bureaublad of een server benaderen zonder een 3e partij client te installeren.

In deze handleiding leer je hoe je VNC op je Linux server installeert en Guacamole gebruikt om een VNC verbinding te maken. We behandelen alle gangbare distributies en geven verschillen aan waar nodig.

Vereisten

  • Een server met Rocky Linux, CentOS, AlmaLinux, Ubuntu of Debian.

  • Apache Guacamole moet geïnstalleerd zijn. Volg onze handleidingen voor hetzelfde.

  • Een niet-root gebruiker met sudo privileges is beschikbaar op de server waarmee je verbinding maakt.

  • Minimaal 2 CPU cores en 4GB RAM op je externe servers voor een vlotte VNC verbinding.

  • Zorg ervoor dat alles bijgewerkt is.

    CentOS / Rocky Linux / AlmaLinux

    $ sudo dnf update
    

    Ubuntu / Debian

    $ sudo apt update && sudo apt upgrade
    
  • Installeer basis hulppakketten. Sommige kunnen al geïnstalleerd zijn.

    CentOS / Rocky Linux / AlmaLinux

    $ sudo dnf install wget curl nano unzip yum-utils -y
    

    Ubuntu / Debian

    $ sudo apt install wget curl nano unzip -y
    

Stap 1 – Installeer een desktop GUI op je server

Voor onze handleiding installeren we de grafische omgeving Xfce. Je kunt echter kiezen om een omgeving naar keuze te installeren. Voer de volgende commando’s uit om een GUI te installeren.

CentOS / Rocky Linux / AlmaLinux

$ sudo dnf install -y epel-release
$ sudo dnf groupinstall -y "Xfce" "base-x"
$ sudo systemctl set-default graphical
$ sudo reboot

Als je onze Apache Guacamole handleiding hebt gevolgd, is de EPEL repository al geïnstalleerd, zodat je het eerste commando kunt overslaan. Het tweede commando installeert de eigenlijke grafische omgeving en bibliotheken, en het derde commando stelt de GUI omgeving in als standaard. Je moet de server opnieuw opstarten om de installatie te laten inwerken.

Ubuntu / Debian

$ sudo apt install xfce4 xfce4-goodies
$ sudo systemctl set-default graphical
$ sudo reboot

Stap 2 – Installeer TigerVNC Server

Er zijn veel VNC server toepassingen die je op je systeem kunt installeren. Voor onze tutorial zullen we TigerVNC server software installeren.

Voer het volgende commando uit om de TigerVNC server te installeren.

CentOS / Rocky Linux / AlmaLinux

$ sudo dnf install tigervnc-server

Ubuntu / Debian

$ sudo apt install tigervnc-standalone-server

Stap 3 – Maak VNC gebruikers-gegevens aan

De volgende stap is het aanmaken van een systeemgebruiker voor VNC van waaruit de verbinding gemaakt zal worden.

CentOS / Rocky Linux / AlmaLinux

Voer de volgende commando’s uit om een nieuwe gebruiker aan te maken en een wachtwoord in te stellen. Vervang vncuser door een gebruikersnaam naar keuze.

$ sudo adduser vncuser
$ sudo passwd vncuser

De volgende stap is het aanmaken van een toegangswachtwoord dat gebruikt zal worden om vanaf de VNC client verbinding te maken met de server op je machine.

Schakel over naar het vncuser.

$ sudo su - vncuser

Stel een VNC toegangswachtwoord in.

$ vncpasswd 
Password:
Verify:
Would you like to enter a view-only password (y/n)? y
Password:
Verify:

Je wordt gevraagd een wachtwoord te maken en hetzelfde te verifiëren. Vervolgens wordt je gevraagd of je een View-only wachtwoord wilt aanmaken. Een View-only wachtwoord is handig als je de VNC toegang wilt beperken tot alleen het bekijken van het systeem en alle interacties met muis of toetsenbord wilt verbieden. Voer y in als je zo’n wachtwoord wilt instellen of voer n in om het proces te beëindigen.

Verlaat de vncuser shell.

$ exit

Ubuntu / Debian

Voer het volgende commando uit om een nieuwe gebruiker aan te maken en een wachtwoord in te stellen. Vervang vncuser door een gebruikersnaam naar keuze.

$ sudo adduser vncuser
Adding user `vncuser' ...
Adding new group `vncuser' (1001) ...
Adding new user `vncuser' (1001) with group `vncuser' ...
Creating home directory `/home/vncuser' ...
Copying files from `/etc/skel' ...
New password:
Retype new password:
passwd: password updated successfully
Changing the user information for vncuser
Enter the new value, or press ENTER for the default
        Full Name []:
        Room Number []:
        Work Phone []:
        Home Phone []:
        Other []:
Is the information correct? [Y/n] y

Schakel over naar de vncuser.

$ sudo su - vncuser

Stel een VNC toegangswachtwoord in.

$ vncpasswd 
Password:
Verify:
Would you like to enter a view-only password (y/n)? y
Password:
Verify:

We moeten het opstartbestand voor TigerVNC configureren om Xfce te gebruiken.

Open het bestand ~/.vnc/xstartup om het te bewerken.

$ sudo nano ~/.vnc/xstartup

Plak er de volgende code in.

#!/bin/sh
unset SESSION_MANAGER
unset DBUS_SESSION_BUS_ADDRESS
exec startxfce4 

Sla het bestand op door op Ctrl + X te drukken en Y in te voeren als om opslaan gevraagd wordt.

Je kunt extra opties voor de VNC instellen via het bestand ~/.vnc/config. Maak het bestand aan en open het voor bewerking.

$ sudo nano ~/.vnc/config

Plak er de volgende code in.

geometry=1024x768
dpi=96
depth=24

Sla het bestand op door op Ctrl + X te drukken en Y in te voeren als om opslaan gevraagd wordt.

Test de VNC server.

$ vncserver
/usr/bin/xauth:  file /home/vncuser/.Xauthority does not exist


New 'vncdesktop:1 (vncuser)' desktop at :1 on machine vncdesktop

Starting applications specified in /home/vncuser/.vnc/xstartup
Log file is /home/vncuser/.vnc/vncdesktop:1.log

Use xtigervncviewer -SecurityTypes VncAuth -passwd /home/vncuser/.vnc/passwd :1 to connect to the VNC server.

Je kunt een lijst van alle huidige VNC sessies krijgen met het volgende commando.

$ vncserver -list
TigerVNC server sessions:

X DISPLAY #     RFB PORT #      PROCESS ID
:1              5901            1029

Vervolgens moeten we het proces doden omdat we er, in de volgende stap, een service bestand voor zullen maken.

$ vncserver -kill :1
Killing Xtigervnc process ID 1029... success!

Sluit de gebruikersshell af.

$ exit

Stap 4 – Maak VNC Systemd Eenheidsbestand

CentOS / Rotsachtige Linux / AlmaLinux

Het systemd service unit bestand van TigerVNC staat in de map /lib/systemd/system. Kopieer het bestand naar de map /etc/systemd/system.

$ sudo cp /lib/systemd/system/[email protected] /etc/systemd/system/[email protected]:1.service

VNC server draait standaard op poort 5900. Elke gebruiker moet zijn VNC server instantie op een aparte poort laten draaien. Het getal :1 aan het eind van het commando geeft VNC de opdracht de dienst op een subpoort van 5900 te laten draaien. Vandaar dat :1 zich vertaalt naar poort 5900, :2 vertaalt naar poort 5902 enzovoort.

Niet alleen moet VNC het poortnummer weten om de dienst op te draaien, maar je moet ook opgeven welke gebruiker de server onder welk poortnummer zal draaien. Je kunt dit instellen door het /etc/tigervnc/vncserver.users bestand te bewerken. Open het om te bewerken.

$ sudo nano /etc/tigervnc/vncserver.users

Voer de waarde :1=vncuser in vlak voor # :2=andrew zodat het er als volgt uitziet.

# TigerVNC User assignment
#
# This file assigns users to specific VNC display numbers.
# The syntax is <display>=<username>. E.g.:
#
  :1=vncuser
# :2=andrew
# :3=lisa

Bewaar het bestand door op Ctrl + X te drukken en Y in te voeren als om opslaan gevraagd wordt.

Ubuntu / Debian

Het installatieprogramma installeert geen systemd service bestand op Ubuntu of Debian systemen. Je moet het handmatig aanmaken. Maak en open het systemd dienstbestand voor TigerVNC.

$ sudo nano /etc/systemd/system/[email protected]

Plak er de volgende code in.

[Unit]
Description=Remote desktop service (VNC)
After=syslog.target network.target

[Service]
Type=simple
User=vncuser
PAMName=login
PIDFile=/home/%u/.vnc/%H%i.pid
ExecStartPre=/bin/sh -c '/usr/bin/vncserver -kill :%i > /dev/null 2>&1 || :'
ExecStart=/usr/bin/vncserver :%i -geometry 1440x900 -alwaysshared -fg
ExecStop=/usr/bin/vncserver -kill :%i

[Install]
WantedBy=multi-user.target

Sla het bestand op door op Ctrl + X te drukken en Y in te voeren als om opslaan gevraagd wordt.

De volgende stap is gemeenschappelijk voor alle Linux distributies.

Herlaad de systemd daemon om de dienst te activeren.

$ sudo systemctl daemon-reload

Stap 5 – Start de VNC Server

CentOS / Rocky Linux / AlmaLinux

Start de VNC server dienst.

$ sudo systemctl start [email protected]:1

Als je wilt dat de dienst ook na een herstart van het systeem blijft draaien, kun je hem aanzetten.

$ sudo systemctl enable [email protected]:1

Controleer de status van de dienst.

$ sudo systemctl status [email protected]:1
? [email protected]:1.service - Remote desktop service (VNC)
   Loaded: loaded (/etc/systemd/system/[email protected]:1.service; disabled; vendor preset: disabled)
   Active: active (running) since Wed 2022-03-16 01:16:18 UTC; 6s ago
  Process: 6777 ExecStart=/usr/libexec/vncsession-start :1 (code=exited, status=0/SUCCESS)
 Main PID: 6784 (vncsession)
    Tasks: 0 (limit: 11179)
   Memory: 1.1M
   CGroup: /system.slice/system-vncserver.slice/[email protected]:1.service
           ? 6784 /usr/sbin/vncsession vncuser :1

Mar 16 01:16:18 guacamole systemd[1]: Starting Remote desktop service (VNC)...
Mar 16 01:16:18 guacamole systemd[1]: Started Remote desktop service (VNC).

Ubuntu / Debian

Start de VNC server dienst.

$ sudo systemctl start [email protected]

Schakel de VNC dienst in.

$ sudo systemctl enable [email protected]

Controleer de status van de dienst.

$ sudo systemctl status [email protected]
? [email protected] - Remote desktop service (VNC)
     Loaded: loaded (/etc/systemd/system/[email protected]; enabled; vendor preset: enabled)
     Active: active (running) since Sat 2022-03-19 09:42:28 UTC; 6s ago
    Process: 1420 ExecStartPre=/bin/sh -c /usr/bin/vncserver -kill :1 > /dev/null 2>&1 || : (code=exited, status=0/SUCCESS)
   Main PID: 1455 (vncserver)
      Tasks: 0 (limit: 4686)
     Memory: 884.0K
     CGroup: /system.slice/system-vncserver.slice/[email protected]
             ? 1455 /usr/bin/perl /usr/bin/vncserver :1 -geometry 1440x900 -alwaysshared -fg

Mar 19 09:42:28 vncdesktop systemd[1]: Starting Remote desktop service (VNC)...
Mar 19 09:42:28 vncdesktop systemd[1420]: pam_unix(login:session): session opened for user vncuser by (uid=0)
Mar 19 09:42:28 vncdesktop systemd[1]: Started Remote desktop service (VNC).
Mar 19 09:42:29 vncdesktop systemd[1455]: pam_unix(login:session): session opened for user vncuser by (uid=0)

Stap 6 – Configureer Firewall

Om VNC over het netwerk toegankelijk te maken, moeten we zijn poorten openen.

CentOS / Rocky Linux / AlmaLinux

Voer het volgende commando uit om de VNC poorten te openen en de firewall opnieuw te laden.

$ sudo firewall-cmd --permanent --add-service=vnc-server
$ sudo firewall-cmd --reload

Ubuntu / Debian

$ sudo ufw allow 5901:5910/tcp
$ sudo ufw reload

Stap 7 – Maak een VNC verbinding met de CentOS / Rocky Linux / AlmaLinux server

Open je Guacamole URL en voer je inloggegevens in om in te loggen.

Ga naar het tabblad Verbindingen onder Guacamole Instellingen. Klik op de knop Nieuwe verbinding.

Guacamole Nieuwe Verbinding

Kies een naam voor je verbinding en selecteer VNC uit het dropdown menu.

Guacamole VNC Verbindingstype

Voer in de sectie Parameters het IP adres van je server in (167.172.46.187 in ons geval) als hostnaam en 5901 als poort. Onder het kopje Authentication voer je je VNC systeem gebruikersnaam en wachtwoord in.

Guacamole VNC Parameters

Als je nog andere instellingen wilt inschakelen, doe dat dan. Klik op Save om het toevoegen van de verbinding te voltooien.

Krijg toegang tot je machine met VNC

Ga naar het Guacamole dashboard en klik op je VNC Verbinding onder de sectie Alle verbindingen.

Guacamole VNC Verbindingslijst

Je wordt begroet met het Lock scherm van je server.

Guacamole VNC Bureaublad Lockscreen

Doe het weg en voer je VNC gebruikersgegevens in.

Guacamole VNC Desktop Login Screen

Druk op de Unlock knop om verder te gaan naar het startscherm van je server/desktop.

Guacamole VNC Rocky Linux Desktop

Je kunt op je machine gaan werken.

Stap 8 – Maak een VNC verbinding met een externe Ubuntu/Debian server

Als je Guacamole installatie en de bureaubladomgeving op dezelfde server staan, kun je met de bovenstaande stappen VNC verbinding maken met je server. Onze Rocky Linux installatie stond op dezelfde server, maar onze Ubuntu omgeving stond op een andere server. In zo’n geval zullen we SSH tunneling gebruiken om een VNC verbinding met de server te maken, omdat dit een veiliger methode is.

Open je Guacamole URL en voer je inloggegevens in om in te loggen.

Ga naar het tabblad Verbindingen onder Guacamole Instellingen. Klik op de knop Nieuwe verbinding.

Guacamole Nieuwe Verbinding

Kies een naam voor je verbinding en kies VNC uit het dropdown menu.

Guacamole Ubuntu VNC Verbindingstype

Voer onder de sectie Parameters het localhost adres in als hostnaam en 5001 als poort. Laat de sectie Authenticatie leeg, want die zullen we in de volgende stap gebruiken. We zullen het zo meteen ook hebben over waarom we localhost als host gebruiken.

Guacamole VNC Parameters voor SSH Tunneling

Als je nog andere instellingen wilt inschakelen, doe dat dan. Klik op Save om het toevoegen van de verbinding te voltooien.

Maak een SSH Tunnel

Voer het volgende commando uit vanaf de terminal van de server die Guacamole host.

$ ssh -L 5001:localhost:5901 [email protected]

Laten we even doornemen wat hier gebeurt. Het bovenstaande commando stuurt de SSH verbinding van je systeem door naar de remote server met behulp van local port forwarding.

  • De vlag -L specificeert het doorsturen van lokale poorten.
  • De 5001 poort is de poort op je Guacamole machine waarmee we de remote server kunnen benaderen. Je kunt een andere poort kiezen als je dat wilt.
  • localhost:5901 is de remote VNC server en het weergavenummer (en het bijbehorende poortnummer) om mee te verbinden. Omdat we lokaal port forwarding doen, wordt het adres van de remote server voor ons vertaald naar localhost.
  • [email protected] In ons geval zijn dat de SSH gebruiker en het IP adres van de remote Ubuntu / Debian server die we benaderen.

De SSH tunnel blijft open zolang het commando loopt. Type exit op de terminal om de tunnel te verlaten en de VNC verbinding te sluiten.

Krijg toegang tot je machine met VNC

Ga naar het Guacamole dashboard en klik op je VNC Verbinding onder de sectie Alle verbindingen.

Guacamole VNC Verbindingslijst

Je wordt begroet met een wachtwoordprompt die vraagt om het VNC wachtwoord dat je instelde met het vncpasswd commando. Voer het wachtwoord in en druk op Doorgaan om verder te gaan.

Guacamole VNC Toegang Wachtwoord Prompt

Na succesvolle bevestiging kom je op het bureaubladscherm van je systeem.

Guacamole VNC Ubuntu Bureaublad Scherm

Je kunt op je machine beginnen werken.

Conclusie

Dit beëindigt onze handleiding over het gebruik van Apache Guacamole om een VNC verbinding met een Linux server te maken. Als je nog vragen hebt, stel ze dan in de commentaar hieronder.