Introductie
Virtual Network Computing, of VNC, is een verbindingsysteem dat het mogelijk maakt om met behulp van uw toetsenbord en muis te communiceren met een grafische desktopomgeving op een externe server. Het maakt het beheren van bestanden, software en instellingen op een externe server gemakkelijker voor gebruikers die nog niet bekend zijn met de opdrachtregel.
In deze handleiding zult u een VNC-server opzetten met TightVNC op een Ubuntu 22.04-server en er veilig verbinding mee maken via een SSH-tunnel. Vervolgens zult u een VNC-clientprogramma op uw lokale machine gebruiken om te communiceren met uw server via een grafische desktopomgeving.
Vereisten
Om deze handleiding te voltooien heeft u nodig:
- Een Ubuntu 22.04-server met een niet-root beheerdersaccount en een firewall geconfigureerd met UFW. Om dit in te stellen, volg onze handleiding voor het instellen van een server voor Ubuntu 22.04.
- A local computer with a VNC client installed. The VNC client you use must support connections over SSH tunnels:
Stap 1 — Het installeren van de desktopomgeving en VNC-server
Standaard wordt een Ubuntu 22.04-server niet geleverd met een grafische desktopomgeving of een VNC-server geïnstalleerd, dus u begint met het installeren daarvan.
U heeft veel opties als het gaat om welke VNC-server en desktopomgeving u kiest. In deze handleiding installeert u pakketten voor de nieuwste Xfce desktopomgeving en het TightVNC-pakket dat beschikbaar is in het officiële Ubuntu-repository. Zowel Xfce als TightVNC staan bekend om hun lichte en snelle prestaties, wat ervoor zal zorgen dat de VNC-verbinding soepel en stabiel zal zijn, zelfs op langzamere internetverbindingen.
Na verbinding te hebben gemaakt met uw server via SSH, werkt u uw lijst met pakketten bij:
Installeer nu Xfce samen met het xfce4-goodies
-pakket, dat een paar verbeteringen voor de desktopomgeving bevat:
Tijdens de installatie kan het zijn dat je wordt gevraagd om een standaard display-manager te kiezen voor Xfce. Een display-manager is een programma waarmee je via een grafische interface een desktopomgeving kunt selecteren en inloggen. Je zult alleen Xfce gebruiken wanneer je verbinding maakt met een VNC-client, en in deze Xfce-sessies zul je al zijn ingelogd als je niet-root Ubuntu-gebruiker. Dus voor dit doel is je keuze van display-manager niet relevant. Selecteer er gewoon een en druk op ENTER
.
Zodra die installatie is voltooid, installeer de TightVNC-server:
Voer vervolgens het vncserver
-commando uit om een VNC-toegangswachtwoord in te stellen, de initiële configuratiebestanden te maken en een VNC-serverinstantie te starten:
Je wordt gevraagd om een wachtwoord in te voeren en te verifiëren om toegang te krijgen tot je machine op afstand:
OutputYou will require a password to access your desktops.
Password:
Verify:
Het wachtwoord moet tussen de zes en acht tekens lang zijn. Wachtwoorden langer dan 8 tekens worden automatisch afgekapt.
Zodra je het wachtwoord hebt geverifieerd, heb je de optie om een alleen-lezen wachtwoord te maken. Gebruikers die inloggen met het alleen-lezen wachtwoord kunnen de VNC-instantie niet bedienen met hun muis of toetsenbord. Dit is een handige optie als je iets wilt demonstreren aan andere mensen die je VNC-server gebruiken, maar dit is niet vereist.
Het proces maakt vervolgens de noodzakelijke standaard configuratiebestanden en verbindingsinformatie voor de server aan. Bovendien start het een standaard serverinstantie op poort 5901
. Deze poort wordt een displaypoort genoemd en wordt door VNC aangeduid als :1
. VNC kan meerdere instanties starten op andere displaypoorten, waarbij :2
verwijst naar poort 5902
, :3
naar 5903
, enzovoort:
OutputWould you like to enter a view-only password (y/n)? n
xauth: file /home/sammy/.Xauthority does not exist
New 'X' desktop is your_hostname:1
Creating default startup script /home/sammy/.vnc/xstartup
Starting applications specified in /home/sammy/.vnc/xstartup
Log file is /home/sammy/.vnc/your_hostname:1.log
Merk op dat als je ooit je wachtwoord wilt wijzigen of een alleen-lezen wachtwoord wilt toevoegen, je dit kunt doen met het vncpasswd
commando:
Op dit punt is de VNC-server geïnstalleerd en actief. Nu ga je deze configureren om Xfce te starten en ons toegang te geven tot de server via een grafische interface.
Stap 2 — Configuratie van de VNC-server
De VNC-server moet weten welke commando’s moeten worden uitgevoerd bij het opstarten. Specifiek moet VNC weten welke grafische desktopomgeving het moet verbinden.
De commando’s die de VNC-server uitvoert bij het opstarten bevinden zich in een configuratiebestand genaamd xstartup
in de map .vnc
onder je thuisdirectory. Het opstartscript is aangemaakt toen je het vncserver
commando uitvoerde in de vorige stap, maar je zult je eigen script maken om de Xfce-desktop te starten.
Omdat je de configuratie van de VNC-server gaat wijzigen, stop eerst de VNC-serverinstantie die draait op poort 5901
met het volgende commando:
De uitvoer zal er zo uitzien, hoewel je een ander PID zult zien:
OutputKilling Xtightvnc process ID 17648
Voordat je het xstartup
-bestand wijzigt, maak eerst een back-up van het origineel:
Maak nu een nieuw xstartup
-bestand en open het in een teksteditor, zoals nano
:
Voeg vervolgens de volgende regels toe aan het bestand:
#!/bin/bash
xrdb $HOME/.Xresources
startxfce4 &
De eerste regel is een shebang. In uitvoerbare platte tekstbestanden op *nix-platforms vertelt een shebang het systeem aan welke interpreter dat bestand moet worden doorgegeven voor uitvoering. In dit geval geef je het bestand door aan de Bash-interpreter. Hierdoor worden de opeenvolgende regels als commando’s uitgevoerd, in volgorde.
Het eerste commando in het bestand, xrdb $HOME/.Xresources
, vertelt het GUI-framework van VNC om het bestand .Xresources
van de servergebruiker te lezen. .Xresources
is waar een gebruiker wijzigingen kan aanbrengen in bepaalde instellingen van het grafische bureaublad, zoals terminalkleuren, cursorthema’s en lettertype-rendering. Het tweede commando vertelt de server om Xfce te starten. Telkens wanneer je de VNC-server start of opnieuw start, worden deze commando’s automatisch uitgevoerd.
Sla het bestand op en sluit het nadat je deze regels hebt toegevoegd. Als je nano
hebt gebruikt, doe dit dan door op CTRL + X
, Y
en vervolgens ENTER
te drukken.
Om ervoor te zorgen dat de VNC-server dit nieuwe opstartbestand correct kan gebruiken, moet je het uitvoerbaar maken:
Start vervolgens de VNC-server opnieuw:
Merk op dat deze keer de opdracht de optie -localhost
bevat, waarmee de VNC-server wordt gebonden aan de loopback-interface van uw server. Hierdoor zal VNC alleen verbindingen toestaan die afkomstig zijn van de server waarop het is geïnstalleerd.
In de volgende stap zult u een SSH-tunnel tot stand brengen tussen uw lokale machine en uw server, waarbij u in feite VNC voor de gek houdt door te denken dat de verbinding vanaf uw lokale machine afkomstig is van uw server. Deze strategie voegt een extra beveiligingslaag toe rond VNC, aangezien alleen gebruikers die al SSH-toegang hebben tot uw server, er toegang toe zullen hebben.
U zult uitvoer zien die vergelijkbaar is met dit:
OutputNew 'X' desktop is your_hostname:1
Starting applications specified in /home/sammy/.vnc/xstartup
Log file is /home/sammy/.vnc/your_hostname:1.log
Met de configuratie op zijn plaats, bent u klaar om verbinding te maken met de VNC-server vanaf uw lokale machine.
Stap 3 — Beveiligd verbinden met het VNC-bureaublad
VNC zelf maakt geen gebruik van beveiligde protocollen bij het verbinden. Om veilig verbinding te maken met uw server, zult u een SSH-tunnel tot stand brengen en vervolgens uw VNC-client vertellen om verbinding te maken via die tunnel in plaats van rechtstreeks verbinding te maken.
Maak een SSH-verbinding op uw lokale computer die veilig doorstuurt naar de localhost
-verbinding voor VNC. U kunt dit doen via de terminal op Linux of macOS met de volgende ssh
-opdracht:
Hier is wat de opties van deze ssh
-opdracht betekenen:
-L 59000:localhost:5901
: De-L
schakelaar geeft aan dat de opgegeven poort op de lokale computer (59000
) moet worden doorgestuurd naar de opgegeven host en poort op de bestemmingsserver (localhost:5901
, wat poort5901
op de bestemmingsserver betekent, gedefinieerd alsyour_server_ip
). Let op dat de lokale poort die je opgeeft enigszins willekeurig is; zolang de poort niet al aan een andere service is gebonden, kun je deze gebruiken als de doorstuurpoort voor je tunnel.-C
: Deze vlag schakelt compressie in wat kan helpen om het gebruik van resources te minimaliseren en dingen te versnellen.-N
: Deze optie verteltssh
dat je geen externe commando’s wilt uitvoeren. Deze instelling is handig wanneer je alleen poorten wilt doorsturen.-l sammy your_server_ip
: De-l
schakelaar stelt je in staat om de gebruiker op te geven waarmee je wilt inloggen zodra je verbinding maakt met de server. Zorg ervoor dat jesammy
enyour_server_ip
vervangt door de naam van je niet-rootgebruiker en het IP-adres van je server.
Opmerking: Dit commando maakt een SSH-tunnel aan die informatie doorstuurt van poort 5901
op je VNC-server naar poort 59000
op je lokale machine via poort 22
op elke machine, de standaardpoort voor SSH. Als je de vereiste Initiële serverconfiguratiehandleiding voor Ubuntu 22.04 hebt gevolgd, heb je een UFW-regel toegevoegd om verbindingen met je server via OpenSSH toe te staan.
Dit is veiliger dan simpelweg de firewall van uw server open te stellen om verbindingen naar poort 5901
toe te staan, omdat dit iedereen in staat zou stellen om via VNC toegang te krijgen tot uw server. Door via een SSH-tunnel verbinding te maken, beperkt u VNC-toegang tot machines die al SSH-toegang hebben tot de server.
Als u PuTTY gebruikt om verbinding te maken met uw server, kunt u een SSH-tunnel maken door met de rechtermuisknop op de bovenste balk van het terminalvenster te klikken en vervolgens op de Instellingen wijzigen… optie te klikken:
Zoek de Verbinding-tak in het boommenu aan de linkerkant van het PuTTY configuratievenster. Breid de SSH-tak uit en klik op Tunnels. Op het Opties voor het beheersen van SSH-poortdoorsturing scherm voert u 59000
in als de Bronpoort en localhost:5901
als de Bestemming, zoals dit:
Klik vervolgens op de Toevoegen-knop en daarna op de Toepassen-knop om de tunnel te implementeren.
Zodra de tunnel actief is, gebruikt u een VNC-client om verbinding te maken met localhost:59000
. U wordt gevraagd om te verifiëren met het wachtwoord dat u hebt ingesteld in Stap 1.
Zodra u verbonden bent, ziet u het standaard Xfce-bureaublad. Het zou er ongeveer zo uit moeten zien:
U kunt bestanden in uw homemap openen met de bestandsbeheerder of vanaf de opdrachtregel, zoals hier te zien is:
Druk op CTRL+C
in uw lokale terminal om de SSH-tunnel te stoppen en terug te keren naar uw opdrachtprompt. Hierdoor wordt ook uw VNC-sessie verbroken.
Nu kunt u uw VNC-server configureren om te draaien als een systemd-service.
Stap 4 — Het uitvoeren van VNC als een systeemservice
Door de VNC-server in te stellen om te draaien als een systemd-service, kunt u deze starten, stoppen en herstarten zoals nodig, net als elke andere service. U kunt ook gebruikmaken van de beheeropdrachten van systemd om ervoor te zorgen dat VNC start wanneer uw server opstart.
Eerst, maak een nieuw eenheidsbestand genaamd /etc/systemd/system/[email protected]
:
Het @
-symbool aan het einde van de naam stelt ons in staat een argument door te geven dat u kunt gebruiken in de serviceconfiguratie. U zult dit gebruiken om de VNC-weergavepoort te specificeren die u wilt gebruiken bij het beheren van de service.
Voeg de volgende regels toe aan het bestand. Zorg ervoor dat u de waarde van User, Group, WorkingDirectory en de gebruikersnaam in de waarde van PIDFILE aanpast aan uw gebruikersnaam:
[Unit]
Description=Start TightVNC server at startup
After=syslog.target network.target
[Service]
Type=forking
User=sammy
Group=sammy
WorkingDirectory=/home/sammy
PIDFile=/home/sammy/.vnc/%H:%i.pid
ExecStartPre=-/usr/bin/vncserver -kill :%i > /dev/null 2>&1
ExecStart=/usr/bin/vncserver -depth 24 -geometry 1280x800 -localhost :%i
ExecStop=/usr/bin/vncserver -kill :%i
[Install]
WantedBy=multi-user.target
De ExecStartPre
-opdracht stopt VNC als het al draait. De ExecStart
-opdracht start VNC en stelt de kleurdiepte in op 24-bits kleur met een resolutie van 1280×800. U kunt deze opstartopties ook aanpassen aan uw behoeften. Merk ook op dat de ExecStart
-opdracht opnieuw de -localhost
-optie bevat.
Sla het bestand op en sluit het af.
Vervolgens maakt u het systeem op de hoogte van het nieuwe eenheidsbestand:
Activeer het eenheidsbestand:
Het 1
dat volgt op het @
-teken geeft aan over welk weergavenummer de service moet verschijnen, in dit geval de standaard :1
zoals besproken in Stap 2.
Stop de huidige instantie van de VNC-server als deze nog steeds actief is:
Vervolgens start u deze zoals u elke andere systemd-service zou starten:
U kunt controleren of deze is gestart met dit commando:
Als het correct is gestart, zou de uitvoer er zo uit moeten zien:
Output● [email protected] - Start TightVNC server at startup
Loaded: loaded (/etc/systemd/system/[email protected]; enabled; vendor preset: enabled)
Active: active (running) since Mon 2022-04-18 16:57:26 UTC; 20s ago
Process: 97088 ExecStartPre=/usr/bin/vncserver -kill :1 > /dev/null 2>&1 (code=exited, status=2)
Process: 97092 ExecStart=/usr/bin/vncserver -depth 24 -geometry 1280x800 -localhost :1 (code=exited, status=0/SUCCESS)
Main PID: 97103 (Xtightvnc)
Tasks: 77 (limit: 4665)
Memory: 146.7M
CPU: 4.459s
CGroup: /system.slice/system-vncserver.slice/[email protected]
. . .
Uw VNC-server is nu klaar voor gebruik telkens wanneer uw server wordt opgestart, en u kunt deze beheren met systemctl
-opdrachten zoals elke andere systemd-service.
Er zal echter geen verschil zijn aan de kant van de client. Om opnieuw verbinding te maken, start u opnieuw uw SSH-tunnel:
Maak vervolgens een nieuwe verbinding met uw VNC-clientsoftware naar localhost:59000
om verbinding te maken met uw server.
Conclusie
U heeft nu een beveiligde VNC-server actief en draaiende op uw Ubuntu 22.04-server. Nu kunt u uw bestanden, software en instellingen beheren met een gebruiksvriendelijke grafische interface, en u kunt op afstand grafische software zoals webbrowsers uitvoeren.
Source:
https://www.digitalocean.com/community/tutorials/how-to-install-and-configure-vnc-on-ubuntu-22-04