Introduzione
Virtual Network Computing, o VNC, è un sistema di connessione che ti consente di utilizzare la tastiera e il mouse per interagire con un ambiente desktop grafico su un server remoto. Rende più facile la gestione di file, software e impostazioni su un server remoto per gli utenti che non sono ancora a proprio agio con la riga di comando.
In questa guida, configurerai un server VNC con TightVNC su un server Ubuntu 22.04 e ti connetterai ad esso in modo sicuro tramite un tunnel SSH. Successivamente, utilizzerai un programma client VNC sul tuo computer locale per interagire con il server tramite un ambiente desktop grafico.
Prerequisiti
Per completare questo tutorial, avrai bisogno di:
- Un server Ubuntu 22.04 con un utente amministrativo non root e un firewall configurato con UFW. Per configurare questo, segui la nostra guida alla configurazione iniziale del server per Ubuntu 22.04.
- A local computer with a VNC client installed. The VNC client you use must support connections over SSH tunnels:
Passaggio 1 — Installazione dell’Ambiente Desktop e del Server VNC
Per impostazione predefinita, un server Ubuntu 22.04 non dispone di un ambiente desktop grafico o di un server VNC installato, quindi inizierai installando entrambi.
Hai molte opzioni quando si tratta di scegliere quale server VNC e ambiente desktop utilizzare. In questo tutorial, installerai i pacchetti per l’ultimo ambiente desktop Xfce e il pacchetto TightVNC disponibile nel repository ufficiale di Ubuntu. Sia Xfce che TightVNC sono noti per essere leggeri e veloci, il che garantirà che la connessione VNC sia fluida e stabile anche su connessioni internet più lente.
Dopo esserti connesso al tuo server con SSH, aggiorna la lista dei pacchetti:
Ora installa Xfce insieme al pacchetto xfce4-goodies
, che contiene alcuni miglioramenti per l’ambiente desktop:
Durante l’installazione, potresti essere invitato a scegliere un gestore di visualizzazione predefinito per Xfce. Un gestore di visualizzazione è un programma che ti consente di selezionare e accedere a un ambiente desktop attraverso un’interfaccia grafica. Utilizzerai solo Xfce quando ti colleghi con un client VNC, e in queste sessioni Xfce sarai già connesso come utente non root di Ubuntu. Quindi, ai fini di questo tutorial, la scelta del gestore di visualizzazione non è pertinente. Seleziona uno qualsiasi e premi INVIO
.
Una volta completata l’installazione, installa il server TightVNC:
Successivamente, esegui il comando vncserver
per impostare una password di accesso VNC, creare i file di configurazione iniziali e avviare un’istanza del server VNC:
Ti verrà chiesto di inserire e verificare una password per accedere al tuo computer in remoto:
OutputYou will require a password to access your desktops.
Password:
Verify:
La password deve essere lunga da sei a otto caratteri. Le password più lunghe di 8 caratteri verranno troncate automaticamente.
Dopo aver verificato la password, avrai l’opzione di creare una password solo per la visualizzazione. Gli utenti che accedono con la password di sola visualizzazione non potranno controllare l’istanza VNC con il mouse o la tastiera. Questa è un’opzione utile se desideri mostrare qualcosa ad altre persone utilizzando il tuo server VNC, ma non è obbligatoria.
Il processo crea quindi i file di configurazione predefiniti necessari e le informazioni di connessione per il server. Inoltre, avvia un’istanza predefinita del server sulla porta 5901
. Questa porta è chiamata porta di visualizzazione, e viene indicata da VNC come :1
. VNC può avviare più istanze su altre porte di visualizzazione, con :2
che si riferisce alla porta 5902
, :3
che si riferisce a 5903
, e così via:
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
Nota che se mai desideri cambiare la tua password o aggiungere una password solo per la visualizzazione, puoi farlo con il comando vncpasswd
:
A questo punto, il server VNC è installato e in esecuzione. Ora lo configureremo per avviare Xfce e darci accesso al server tramite un’interfaccia grafica.
Passaggio 2 — Configurazione del server VNC
Il server VNC deve sapere quali comandi eseguire all’avvio. In particolare, VNC deve sapere a quale ambiente desktop grafico connettersi.
I comandi che il server VNC esegue all’avvio sono situati in un file di configurazione chiamato xstartup
nella cartella .vnc
nella tua directory home. Lo script di avvio è stato creato quando hai eseguito il comando vncserver
nel passaggio precedente, ma ne creerai uno tuo per avviare il desktop Xfce.
Poiché stai per modificare la configurazione del server VNC, prima fermare l’istanza del server VNC in esecuzione sulla porta 5901
con il seguente comando:
L’output sarà simile a questo, anche se vedrai un PID diverso:
OutputKilling Xtightvnc process ID 17648
Prima di modificare il file xstartup
, esegui il backup dell’originale:
Ora crea un nuovo file xstartup
e aprilo in un editor di testo, come nano
:
Quindi aggiungi le seguenti righe al file:
#!/bin/bash
xrdb $HOME/.Xresources
startxfce4 &
La prima riga è un shebang. Nei file di testo eseguibili su piattaforme *nix, uno shebang indica al sistema quale interprete passare al file per l’esecuzione. In questo caso, stai passando il file all’interprete Bash. Questo permetterà l’esecuzione di ciascuna riga successiva come comandi, nell’ordine.
Il primo comando nel file, xrdb $HOME/.Xresources
, dice al framework GUI di VNC di leggere il file .Xresources
dell’utente del server. .Xresources
è dove un utente può apportare modifiche a determinate impostazioni del desktop grafico, come colori del terminale, temi del cursore e rendering del font. Il secondo comando dice al server di avviare Xfce. Ogni volta che avvii o riavvii il server VNC, questi comandi verranno eseguiti automaticamente.
Salva e chiudi il file dopo aver aggiunto queste righe. Se hai usato nano
, fallo premendo CTRL + X
, Y
, poi INVIO
.
Per garantire che il server VNC possa utilizzare correttamente questo nuovo file di avvio, dovrai renderlo eseguibile:
Quindi riavvia il server VNC:
Nota che questa volta il comando include l’opzione -localhost
, che vincola il server VNC all’interfaccia loopback del tuo server. Questo farà sì che VNC permetta solo connessioni che provengono dal server su cui è installato.
Nel prossimo passaggio, stabilirai un tunnel SSH tra il tuo computer locale e il tuo server, essenzialmente ingannando VNC facendogli credere che la connessione dal tuo computer locale provenga dal tuo server. Questa strategia aggiungerà un ulteriore livello di sicurezza intorno a VNC, poiché gli unici utenti che potranno accedervi sono coloro che hanno già accesso SSH al tuo server.
Vedrai un output simile a questo:
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
Con la configurazione in atto, sei pronto per connetterti al server VNC dal tuo computer locale.
Passaggio 3 — Connessione al Desktop VNC in modo sicuro
VNC stesso non utilizza protocolli sicuri durante la connessione. Per connetterti in modo sicuro al tuo server, stabilirai un tunnel SSH e poi dirai al tuo client VNC di connettersi utilizzando quel tunnel anziché effettuare una connessione diretta.
Crea una connessione SSH sul tuo computer locale che inoltri in modo sicuro alla connessione localhost
per VNC. Puoi farlo tramite il terminale su Linux o macOS con il seguente comando ssh
:
Ecco cosa significano le opzioni di questo comando ssh
:
-L 59000:localhost:5901
: Lo switch-L
specifica che la porta fornita sul computer locale (59000
) deve essere inoltrata all’host e alla porta specificati sul server di destinazione (localhost:5901
, il che significa porta5901
sul server di destinazione, definito comeyour_server_ip
). Nota che la porta locale che specificate è in qualche modo arbitraria; fintanto che la porta non è già associata a un altro servizio, potete utilizzarla come porta di inoltro per il vostro tunnel.-C
: Questo flag abilita la compressione, che può aiutare a minimizzare il consumo di risorse e velocizzare le operazioni.-N
: Questa opzione dice assh
che non si desidera eseguire alcun comando remoto. Questa impostazione è utile quando si desidera solo inoltrare le porte.-l sammy your_server_ip
: Lo switch-l
vi permette di specificare l’utente con cui volete effettuare il login una volta connessi al server. Assicuratevi di sostituiresammy
eyour_server_ip
con il nome del vostro utente non root e l’indirizzo IP del vostro server.
Nota: Questo comando stabilisce un tunnel SSH che inoltra le informazioni dalla porta 5901
del vostro server VNC alla porta 59000
del vostro computer locale tramite la porta 22
su ciascuna macchina, la porta predefinita per SSH. Presumendo che abbiate seguito la guida preliminare Guida alla configurazione iniziale del server per Ubuntu 22.04, avrete aggiunto una regola UFW per consentire le connessioni al vostro server tramite OpenSSH.
Questo è più sicuro rispetto ad aprire semplicemente il firewall del tuo server per consentire connessioni alla porta 5901
, poiché ciò consentirebbe a chiunque di accedere al tuo server tramite VNC. Connettendoti tramite un tunnel SSH, stai limitando l’accesso VNC alle macchine che hanno già accesso SSH al server.
Se stai utilizzando PuTTY per connetterti al tuo server, puoi creare un tunnel SSH facendo clic con il pulsante destro del mouse sulla barra superiore della finestra del terminale e quindi cliccando sull’opzione Modifica impostazioni…:
Trova il ramo Connessione nel menu a albero sul lato sinistro della finestra di riconfigurazione di PuTTY. Espandi il ramo SSH e fai clic su Tunnel. Sulla schermata Opzioni che controllano l’inoltro della porta SSH, inserisci 59000
come Porta Sorgente e localhost:5901
come Destinazione, come segue:
Quindi fai clic sul pulsante Aggiungi, e poi sul pulsante Applica per implementare il tunnel.
Una volta che il tunnel è attivo, utilizza un client VNC per connetterti a localhost:59000
. Ti verrà chiesto di autenticarti utilizzando la password che hai impostato al Passaggio 1.
Una volta connesso, vedrai il desktop Xfce predefinito. Dovrebbe apparire qualcosa del genere:
Puoi accedere ai file nella tua directory home con il gestore di file o dalla riga di comando, come mostrato qui:
Premi CTRL+C
nel tuo terminale locale per interrompere il tunnel SSH e tornare al prompt. Questo disconnetterà anche la tua sessione VNC.
Ora puoi configurare il tuo server VNC per funzionare come un servizio systemd.
Passo 4 — Esecuzione di VNC come un servizio di sistema
Configurando il server VNC per eseguirsi come servizio di systemd, è possibile avviarlo, arrestarlo e riavviarlo secondo necessità, come qualsiasi altro servizio. È inoltre possibile utilizzare i comandi di gestione di systemd per garantire che VNC si avvii quando il server si avvia.
Per prima cosa, crea un nuovo file di unità chiamato /etc/systemd/system/[email protected]
:
Il simbolo @
alla fine del nome ci permetterà di passare un argomento che potrai utilizzare nella configurazione del servizio. Lo utilizzerai per specificare la porta di visualizzazione VNC che desideri utilizzare quando gestisci il servizio.
Aggiungi le seguenti righe al file. Assicurati di modificare il valore di User, Group, WorkingDirectory e il nome utente nel valore di PIDFILE per corrispondere al tuo nome utente:
[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
Il comando ExecStartPre
interrompe VNC se è già in esecuzione. Il comando ExecStart
avvia VNC e imposta la profondità del colore a 24 bit con una risoluzione di 1280×800. È possibile modificare anche queste opzioni di avvio per soddisfare le proprie esigenze. Inoltre, nota che il comando ExecStart
include nuovamente l’opzione -localhost
.
Salva e chiudi il file.
Successivamente, rendi il sistema consapevole del nuovo file di unità:
Abilita il file di unità:
Il 1
che segue il segno @
indica su quale numero di visualizzazione il servizio dovrebbe apparire, in questo caso il valore predefinito :1
come discusso nel Passaggio 2.
Ferma l’istanza corrente del server VNC se è ancora in esecuzione:
Quindi avvialo come avvieresti qualsiasi altro servizio systemd:
Puoi verificare che sia stato avviato con questo comando:
Se è stato avviato correttamente, l’output dovrebbe apparire così:
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]
. . .
Il tuo server VNC è ora pronto per essere utilizzato ogni volta che il server si avvia e puoi gestirlo con i comandi systemctl
come qualsiasi altro servizio systemd.
Tuttavia, non ci sarà alcuna differenza sul lato client. Per riconnettersi, avvia nuovamente il tuo tunnel SSH:
Quindi effettua una nuova connessione utilizzando il software client VNC a localhost:59000
per connetterti al tuo server.
Conclusione
Ora hai un server VNC sicuro in funzione sul tuo server Ubuntu 22.04. Ora sarai in grado di gestire i tuoi file, software e impostazioni con un’interfaccia grafica user-friendly e potrai eseguire software grafico come browser web in remoto.
Source:
https://www.digitalocean.com/community/tutorials/how-to-install-and-configure-vnc-on-ubuntu-22-04