Connexion VNC via SSH tunnel

Si vous souhaitez utiliser votre serveur comme un ordinateur et travailler à distance avec des documents à l’aide de l’interface graphique, ou si vous ne souhaitez pas travailler avec le serveur via SSH, vous pouvez utiliser VNC (Virtual Network Computing).

On va configurer le serveur VNC avec l’aide TightVNC sur Ubuntu 20.04 avec l’interface graphique Xfce et connecter un ordinateur local avec un programme client VNC via un tunnel sécurisé SSH et installer Firefox et Libreoffice. 

Pour faire ce projet je vais utiliser:

  • Virtual private server (VPS): 3 vCore, 2.5 GB RAM, 40 GB SSD, 1Gbps (https://www.racknerd.com/) avec Ubuntu 20.04. Pour le test je vais utiliser utilisateur root. Mais pour le travail il faut créer un autre utilisateur sudoers (qui a le droit d’exécuter la commande sudo).
  • Ordinateur local –  laptop avec VNC client et MobaXterm

Installation d’une interface graphique  (GUI) sur VPS 

Puisque notre serveur sera utilisé comme un ordinateur normal, vous devez installer une interface graphique. On va installer le xfce car il utilise le moins de ressources:

sudo apt install xfce4 xfce4-goodies

J’ai choisi LightDM parce qu’il consomme beaucoup moins de ressources 🙂

Installation TightVNC sur Ubuntu 20.04

Pour installer il faut exécuter:

sudo apt install tightvncserver

Maintenant on va configurer mot de passe pour VNC. Le mot de passe doit comporter entre 6 et 8 caractères. Les mots de passe de plus de 8 caractères seront automatiquement tronqués.

vncserver

Pour changer le mot de passe:

vncpasswd

Configuration d’un serveur VNC

Vous devez d’abord arrêter le serveur VNC en cours d’exécution en utilisant l’option kill

vncserver -kill :1

Avant de modifier le fichier xstartup, vous devez sauvegarder le fichier d’origine:

mv ~/.vnc/xstartup ~/.vnc/xstartup.bak

Il faut corriger le file:

nano ~/.vnc/xstartup

Il faut ajouter:

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

Ce script exécute démarrage de startxfce4 

Pour que le serveur VNC utilise correctement le nouveau script, vous devez le rendre exécutable:

chmod +x ~/.vnc/xstartup

Redémarrez ensuite le serveur VNC avec l’option -localhost, qui lie le serveur VNC à l’interface de votre serveur. Grâce à cela, VNC n’autorise que les connexions provenant du serveur sur lequel il est installé.

vncserver -localhost

Création d’un tunnel SSH entre votre ordinateur local (avec Linux) et votre serveur:

Cela ajoute une couche de sécurité supplémentaire car seuls les utilisateurs qui ont déjà un accès SSH à votre serveur peuvent y accéder (j’ai caché les derniers chiffres de mon IP!).

ssh -L 61000:localhost:5901 -C -N -l root 192.210.XXX.XXX 

 -L 59000 : localhost : 5901 : l’option -L spécifie que le port donné sur l’ordinateur local (59000) doit être transféré vers localhost : 5901

-C : ce active la compression

-N : cette option indique à ssh que vous ne souhaitez exécuter aucune commande à distance, uniquement la redirection de port.

-l user  your_server_ip : L’option -l permet de définir l’utilisateur qui doit se connecter après s’être connecté au serveur.

Si vous utiliser MobaXterm

Une fois la connexion établie, on utilise le client VNC pour se connecter au serveur. On utilise l’adresse et mot de passe pour connection:

localhost:61000

Comme ça on peut commencer à utiliser notre vps comme ordinateur à distance! Mai on va aller loin!

Exécuter VNC en tant que le service système

La configuration de VNC en tant que le service systemd vous permettra de le démarrer, de l’arrêter ou de le redémarrer comme n’importe quel autre service

créer un nouveau fichier bloc: /etc/systemd/system/[email protected]

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

Ajoutez les lignes suivantes au fichier. Assurez-vous de remplacer les valeurs des paramètres User, Group, WorkingDirectory et Username par les valeurs PIDFILE qui correspondent à votre nom d’utilisateur :

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

[Service]
Type=forking
User=root
Group=root
WorkingDirectory=/root
PIDFile=/root/.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

On va redémarrer demon

systemctl daemon-reload

Activation service

systemctl enable [email protected]

Vous devez d’abord arrêter le serveur VNC en cours d’exécution en utilisant l’option kill

vncserver -kill :1

Démarrez les serveurs VNC comme n’importe quel autre service systemd :

systemctl start vncserver@1

Verification statut:

systemctl status vncserver@1

Votre serveur VNC est maintenant prêt à être utilisé lorsque vous démarrez votre serveur, et vous pouvez le gérer avec les commandes systemctl comme tout autre service systemd.

Maintenant on va installer quelques logiciels pour avoir un vrais ordinateur de bureau:

Premierement on va installer Firefox:

apt install firefox  

Voilà, Firefox est installé:

Et maintenant on va installer Libreoffice:

apt install libreoffice

Après l’installation on peut le trouver dans le menu:

Et voilà, finalement on peut travailler:

Bonne chance!