Introduzione

Virtual Network Computing (VNC) è un sistema grafico di condivisione desktop che consente di utilizzare tastiera e mouse per controllare in remoto un altro computer. È un'alternativa open source al protocollo desktop remoto (RDP) di Microsoft.

Questa guida illustra i passaggi necessari per l'installazione e la configurazione di un server VNC su Ubuntu 20.04 LTS Focal Fossa. Ti mostreremo anche come connetterti in modo sicuro al server VNC attraverso un tunnel SSH.

Prerequisiti

Prima di continuare con il tutorial, assicurati di aver effettuato l'accesso come utente con privilegi sudo.

Se desideri installare VNC su un server in remoto continua a leggere, altrimenti salta il primo paragrafo "Connessione al Server" e leggi il successivo.

Connessione al Server

Per accedere al server, è necessario conoscere l'indirizzo IP. Avrai anche bisogno dell'username e della password per l'autenticazione. Per connettersi al server come utente root digitare il seguente comando:

ssh [email protected]_DEL_SERVER

Successivamente sarà necessario inserire la password dell'utente root.

Se non utilizzate l'utente root potete connettervi con un'altro nome utente utilizzando lo stesso comando, quindi modificare root con il vostro nome_utente:

ssh [email protected]_DEL_SERVER

Successivamente vi verrà chiesto di inserire la password del vostro utente.

La porta standard per connettersi tramite ssh è la 22, se il vostro server utilizza una porta diversa, sarà necessario specificarla utilizzando il parametro -p, quindi digitare il seguente comando:

ssh [email protected]_DEL_SERVER -p PORTA

Installare il Desktop Environment

La maggior parte dei server non ha un ambiente desktop installato, quindi inizieremo installando un ambiente desktop leggero.

Esistono diversi ambienti desktop (DE) disponibili nei repository Ubuntu. Installeremo Xfce. È un ambiente desktop veloce, stabile e leggero, che lo rende ideale per l'utilizzo su un server remoto.

Immettere i comandi seguenti per installare Xfce sul server:

sudo apt update
sudo apt install xfce4 xfce4-goodies xorg dbus-x11 x11-xserver-utils

A seconda del sistema in uso, il download e l'installazione dei pacchetti Xfce potrebbe richiedere del tempo.

Installare il server VNC

Ci sono anche diversi server VNC disponibili nei repository Ubuntu come TightVNC , TigerVNC e x11vnc. Ogni server VNC ha diversi punti di forza e di debolezza in termini di velocità e sicurezza.

Installeremo TigerVNC. È un server VNC ad alte prestazioni attivamente mantenuto.

Digita il seguente comando per installare TigerVNC sul tuo server Ubuntu:

sudo apt install tigervnc-standalone-server tigervnc-common

Ora che il server VNC è installato, il passo successivo è creare la configurazione iniziale e impostare la password. Non usare sudo quando si esegue il comando vncserver:

vncserver

Ti verrà richiesto di inserire e confermare la password e se impostarla come password di sola visualizzazione. Se si sceglie di impostare una password di sola visualizzazione, l'utente non sarà in grado di interagire con l'istanza VNC con il mouse e la tastiera.

La password deve contenere da sei a otto caratteri. Le password con più di 8 caratteri verranno troncate automaticamente.

Dopo aver verificato la password, avrai la possibilità di creare una password di sola visualizzazione. Gli utenti che accedono con la password di sola visualizzazione non saranno in grado di controllare l'istanza VNC con il mouse o la tastiera. Questa è un'opzione utile se vuoi dimostrare qualcosa ad altre persone usando il tuo server VNC, ma non è necessario.

You will require a password to access your desktops.

Password:
Verify:
Would you like to enter a view-only password (y/n)? n
/usr/bin/xauth:  file /home/noviello/.Xauthority does not exist

New 'server2.noviello.it:1 (noviello)' desktop at :1 on machine server2.noviello.it

Starting applications specified in /etc/X11/Xvnc-session
Log file is /home/noviello/.vnc/server2.noviello.it:1.log

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

Si noti che se si desidera modificare la password o aggiungere una password di sola visualizzazione, è possibile farlo con il comando vncpasswd:

vncpasswd

A questo punto, il server VNC è installato e in esecuzione. Ora configuriamolo per avviare Xfce e darci l'accesso al server attraverso un'interfaccia grafica.

La prima volta che si esegue il comando vncserver , crea e memorizza il file delle password ~/.vnc. Questa directory verrà creata se non presente.

Il parametro :1, dopo l'hostname nell'output sopra, indica il numero della porta di visualizzazione su cui è in esecuzione il server vnc. Nel nostro caso, il server è in esecuzione sulla porta TCP 5901 (5900+1). Se si crea una seconda istanza con vncserver essa verrà eseguita sulla successiva porta libera :2, ovvero , il server sarà in esecuzione sulla porta 5902 (5900+2).

Ciò che è importante ricordare è che quando si lavora con server VNC, :X è una porta di visualizzazione a cui si fa riferimento 5900+X.

Prima di continuare con il passaggio successivo, interrompere l'istanza VNC utilizzando il comando vncserver con l'opzione -kill e il numero del server come argomento. In questo esempio il server è in esecuzione nella porta 5901 (:1), quindi lo arresteremo con:

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

Configurare il server VNC

Ora che sia Xfce che TigerVNC sono installati sul server, dobbiamo configurare TigerVNC per usare Xfce. Per fare ciò, crea il seguente file:

nano ~/.vnc/xstartup

Incollare le seguenti righe di codice

#!/bin/bash
xrdb $HOME/.Xresources
startxfce4 &

Salva e chiudi il file. I comandi sopra verranno eseguiti automaticamente ogni volta che avvii o riavvii il server TigerVNC.

Il file ~/.vnc/xstartup deve inoltre disporre delle autorizzazioni di esecuzione. Eseguire il comando chmod seguente per assicurarsi che le autorizzazioni siano corrette:

chmod u+x ~/.vnc/xstartup

Se è necessario inserire ulteriori opzioni al server VNC, creare un file denominato config e aggiungere un'opzione per riga. Ecco un esempio:

geometry=1920x1084
dpi=96

Quindi riavviare il server VNC:

vncserver -localhost

Creare un file di unità Systemd

Configurando il server VNC per l'esecuzione come servizio systemd è possibile avviarlo, arrestarlo e riavviarlo secondo necessità, come qualsiasi altro servizio. È inoltre possibile utilizzare i comandi di gestione di systemd per assicurarsi che VNC si avvii all'avvio del server.

Innanzitutto, crea un nuovo file di unità chiamato /etc/systemd/system/[email protected]:

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

Il simbolo @ alla fine del nome ci consentirà di passare un argomento che è possibile utilizzare nella configurazione del servizio. Utilizzerai questo 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 in modo che corrispondano al tuo nome utente:

[Unit]
Description=Start TightVNC server at startup
After=syslog.target network.target

[Service]
Type=forking
User=noviello
Group=noviello
WorkingDirectory=/home/noviello

PIDFile=/home/noviello/.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
/etc/systemd/system/[email protected]

Il comando ExecStartPre arresta VNC se è già in esecuzione. Il comando ExecStart avvia VNC e imposta l'intensità del colore sul colore a 24 bit con una risoluzione di 1280x800. Puoi modificare anche queste opzioni di avvio per soddisfare le tue esigenze. Inoltre, si noti che il comando ExecStart include di nuovo l'opzione -localhost.

Salva e chiudi il file.

Quindi, rendere il sistema consapevole del nuovo file di unità:

sudo systemctl daemon-reload

Abilita il file dell'unità:

sudo systemctl enable [email protected]

1 seguito dal simbolo @ indica il numero visualizzato sul quale dovrebbe comparire il servizio, in questo caso l'impostazione predefinita è :1.

Arresta l'istanza corrente del server VNC se è ancora in esecuzione:

vncserver -kill :1

Quindi avvialo come faresti con qualsiasi altro servizio systemd:

sudo systemctl start [email protected]

Puoi verificare che sia iniziato con questo comando:

sudo systemctl status [email protected]

Se è stato avviato correttamente, l'output dovrebbe essere simile al seguente:

[email protected] - Remote desktop service (VNC)
   Loaded: loaded (/etc/systemd/system/[email protected]; indirect; vendor preset: enabled)
   Active: active (running) since Tue 2020-02-11 21:57:43 CET; 4s ago
  Process: 6629 ExecStartPre=/bin/sh -c /usr/bin/vncserver -kill :1 > /dev/null 2>&1 || : (code=exited, status=0/SUCCESS)
 Main PID: 6657 (vncserver)
    Tasks: 0 (limit: 2298)
   CGroup: /system.slice/system-vncserver.slice/[email protected]
           ‣ 6657 /usr/bin/perl /usr/bin/vncserver :1 -geometry 1440x900 -alwaysshared -fg

Il tuo server VNC è ora pronto per l'uso ogni volta che il server si avvia e puoi gestirlo con comandi systemctl come qualsiasi altro servizio systemd.

Connettersi al server VNC

VNC stesso non utilizza protocolli sicuri durante la connessione. Per connettersi in modo sicuro al tuo server, stabilirai un tunnel SSH e poi dirai al tuo client VNC di connettersi usando quel tunnel piuttosto che effettuare una connessione diretta.

Creare una connessione SSH sul computer locale che inoltra in modo sicuro alla connessione per VNC localhost. Puoi farlo tramite il terminale su Linux o macOS con il seguente comando ssh:

ssh -L 59000:localhost:5901 -C -N -l noviello your_server_ip

Ecco cosa significano le opzioni di questo comando ssh:

  • -L 59000:localhost:5901: Lo switch -L specifica che la porta specificata sul computer locale (59000) deve essere inoltrata all'host e alla porta specificata sul server di destinazione (localhost:5901 indica la porta 5901 sul server di destinazione, definita come your_server_ip). Si noti che la porta locale specificata è in qualche modo arbitraria; purché la porta non sia già associata a un altro servizio, è possibile utilizzarla come porta di inoltro per il tunnel.
  • -C: Questo flag consente la compressione che può aiutare a ridurre al minimo il consumo di risorse.
  • -N: Questa opzione indica a ssh che non si desidera eseguire alcun comando remoto. Questa impostazione è utile quando si desidera semplicemente inoltrare le porte.
  • -l noviello your_server_ip: Lo switch -l consente di specificare l'utente a cui si desidera accedere dopo essersi connessi al server. Assicurati di sostituire noviello e your_server_ip con il nome dell'utente non root e l'indirizzo IP del tuo server.
Nota: questo comando stabilisce un tunnel SSH che inoltra le informazioni dalla porta 5901 sul server VNC alla porta 59000 sulla macchina locale tramite la porta 22 su ciascuna macchina, la porta predefinita per SSH. Supponendo che tu abbia seguito la guida alla configurazione iniziale del server iniziale per Ubuntu 20.04 , avrai aggiunto una regola UFW per consentire le connessioni al tuo server su OpenSSH. Per maggiori informazioni sul firewall: Come configurare UFW Firewall su Ubuntu 20.04 LTS.
Questo è più sicuro della semplice apertura del firewall del server per consentire le connessioni alla porta 5901, in quanto consentirebbe a chiunque di accedere al server tramite VNC. Collegandoti su un tunnel SSH, stai limitando l'accesso VNC alle macchine che dispongono già dell'accesso SSH al server.

Se si utilizza PuTTY per connettersi al proprio server, è possibile creare un tunnel SSH facendo clic con il tasto destro sulla barra superiore della finestra del terminale, quindi facendo clic sull'opzione Modifica impostazioni...

Trova il voce Connessione nel menu ad albero sul lato sinistro della finestra di riconfigurazione di PuTTY. Espandi il ramo SSH e fai clic su Tunnel. Nella schermata Opzioni di controllo del port forwarding SSH, immettere 59000 come Porta di origine e localhost:5901 come Destinazione, in questo modo:

Quindi fare clic sul pulsante Aggiungi, quindi sul pulsante Applica per implementare il tunnel.

Una volta che il tunnel è in esecuzione, utilizzare un client VNC per connettersi localhost:59000. Ti verrà richiesto di autenticarti usando la password che hai impostato nel passaggio 1.

Una volta connesso, vedrai il desktop Xfce predefinito.

Puoi accedere ai file nella tua home directory con il file manager o dalla riga di comando.

Premere CTRL+C nel terminale locale per interrompere il tunnel SSH e tornare al prompt. Questo disconnetterà anche la sessione VNC.

Ora puoi configurare il tuo server VNC per l'esecuzione come servizio systemd.

Conclusione

Ormai dovresti avere un server VNC attivo e funzionante e puoi facilmente gestire il tuo server Ubuntu 20.04 LTS Focal Fossa dalla tua macchina desktop locale usando un'interfaccia grafica facile da usare.

Per configurare il server VNC per avviare un display per più di un utente, creare un nuovo file di configurazione iniziale e impostare la password utilizzando il comando vncserver. Sarà inoltre necessario creare un nuovo file di servizio utilizzando una porta diversa.