One place for hosting & domains

      Comment installer et configurer VNC sur Ubuntu 20.04


      Introduction

      Le Virtual Network Computing, ou VNC, est un système de connexion qui vous permet d’utiliser votre clavier et votre souris pour interagir avec un environnement de bureau graphique sur un serveur distant. Il facilite la gestion des fichiers, des logiciels et des paramètres sur un serveur distant pour les utilisateurs qui ne sont pas encore à l’aise avec la ligne de commande.

      Avec ce guide, vous apprendrez à configurer un serveur VNC avec TightVNC sur un serveur Ubuntu 20.04 et vous y connecter en toute sécurité via un tunnel SSH. Ensuite, vous utiliserez un programme client VNC sur votre ordinateur local pour interagir avec votre serveur via un environnement de bureau graphique.

      Conditions préalables

      Pour suivre ce tutoriel, vous aurez besoin des éléments suivants :

      • Un serveur Ubuntu 20.04 avec un utilisateur administratif non root et un pare-feu configuré avec UFW. Pour le mettre en place, suivez notre guide de configuration initiale du serveur pour Ubuntu 20.04.
      • Un ordinateur local avec un client VNC installé. Le client VNC que vous utilisez doit prendre en charge les connexions sur les tunnels SSH :

      Étape 1 – Installation de l’environnement de bureau et du serveur VNC

      Par défaut, un serveur Ubuntu 20.04 n’a pas d’environnement de bureau graphique ou de serveur VNC installé ; vous allez donc commencer par les installer.

      Vous pouvez faire votre choix entre les nombreuses options de serveur VNC et d’environnement de bureau disponibles. Dans ce tutoriel, vous installerez des packages pour le dernier environnement de bureau Xfce et le package TightVNC disponible dans le référentiel Ubuntu officiel. Xfce et TightVNC sont connus pour être légers et rapides, ce qui contribuera à garantir une connexion VNC fluide et stable même sur des connexions Internet plus lentes.

      Une fois connecté à votre serveur avec SSH, mettez à jour votre liste de packages :

      Maintenant installez Xfce avec le package xfce4-goodies, qui contient quelques améliorations pour l’environnement de bureau :

      • sudo apt install xfce4 xfce4-goodies

      Lors de l’installation, vous pouvez être invité à choisir un gestionnaire d’affichage par défaut pour Xfce. Un gestionnaire d’affichage est un programme qui vous permet de sélectionner et de vous connecter à un environnement de bureau via une interface graphique. Vous n’utiliserez Xfce que pour vous connecter à un client VNC, et dans ces sessions Xfce, vous serez déjà connecté en tant qu’utilisateur Ubuntu non root. Donc, pour les besoins de ce tutoriel, votre choix de gestionnaire d’affichage n’est pas pertinent. Sélectionnez-en un puis appuyez sur ENTER.

      Une fois cette installation terminée, installez le serveur TightVNC :

      • sudo apt install tightvncserver

      Ensuite, exécutez la commande vncserver pour définir un mot de passe d’accès VNC, créez les fichiers de configuration initiale et démarrez une instance de serveur VNC :

      Vous serez invité à saisir et à vérifier un mot de passe pour accéder à votre machine à distance :

      Output

      You will require a password to access your desktops. Password: Verify:

      Le mot de passe doit comporter entre six et huit caractères. Les mots de passe de plus de 8 caractères seront automatiquement tronqués.

      Une fois le mot de passe vérifié, vous aurez la possibilité de créer un mot de passe en lecture seule. Les utilisateurs qui se connectent avec le mot de passe en lecture seule ne pourront pas contrôler l’instance VNC avec leur souris ou leur clavier. Cette option est utile si vous souhaitez montrer quelque chose à d’autres personnes à l’aide de votre serveur VNC, mais elle n’est pas obligatoire.

      Le processus crée ensuite les fichiers de configuration par défaut et les informations de connexion nécessaires pour le serveur. Il lance également une instance de serveur par défaut sur le port 5901. Ce port est un port d’affichage et VNC le désigne par :1. VNC peut lancer plusieurs instances sur d’autres ports d’affichage, avec :2 pour le port 5902,:3 pour le port 5903, et ainsi de suite :

      Output

      Would 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

      Notez que si vous souhaitez modifier votre mot de passe ou ajouter un mot de passe en lecture seule, vous pouvez le faire avec la commande vncpasswd :

      À ce stade, le serveur VNC est installé et en cours d’exécution. Maintenant, configurons-le pour lancer Xfce qui nous donnera accès au serveur via une interface graphique.

      Étape 2 – Configuration du serveur VNC

      Le serveur VNC doit savoir quelles commandes exécuter lorsqu’il démarre. Plus précisément, VNC doit savoir à quel environnement de bureau graphique se connecter.

      Les commandes que le serveur VNC exécute au démarrage se trouvent dans un fichier de configuration appelé xstartup dans le dossier .vnc, sous votre répertoire personnel. Le script de démarrage a été créé lorsque vous avez exécuté la commande vncserver à l’étape précédente, mais vous allez créer le vôtre pour lancer le bureau Xfce.

      Étant donné que vous allez modifier la configuration du serveur VNC, arrêtez tout d’abord l’instance du serveur VNC lancée sur le port 5901 grâce à la commande suivante :

      La sortie devrait ressembler à ceci, bien que vous verrez un PID différent :

      Output

      Killing Xtightvnc process ID 17648

      Avant de modifier le fichier xstartup, sauvegardez l’original :

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

      Maintenant, créez un nouveau fichier xstartup et ouvrez-le dans un éditeur de texte, comme nano :

      Ajoutez ensuite les lignes suivantes au fichier :

      ~/.vnc/xstartup

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

      La première ligne est un shebang. Dans les fichiers exécutables en texte brut sur les plates-formes * nix, un shebang indique au système à quel interpréteur de commandes transmettre ce fichier pour exécution. Dans ce cas, vous transmettez le fichier à l’interprèteur de commandes Bash. Cela permettra à chaque ligne successive d’être exécutée sous forme de commandes, dans l’ordre.

      La première commande du fichier, xrdb $HOME/. Xresources​​​, indique au framework de l’interface graphique de VNC de lire le fichier . Xresources. . Xresources permet à un utilisateur de modifier certains paramètres du bureau graphique, tels que les couleurs du terminal, les thèmes de curseur et le rendu des polices. La deuxième commande indique au serveur de lancer Xfce. Ces commandes s’exécuteront automatiquement à chaque fois que vous démarrerez ou redémarrerez le serveur VNC.

      Enregistrez et fermez le fichier après avoir ajouté ces lignes. Si vous avez utilisé nano, faites-le en appuyant sur CTRL+X, Y, puis ENTER.

      Pour que le serveur VNC puisse utiliser correctement ce nouveau fichier de démarrage, vous devez le rendre exécutable.

      Ensuite, redémarrez le serveur VNC :

      Notez que cette fois, la commande inclut l’option -localhost, qui lie le serveur VNC à l’interface de bouclage de votre serveur. Cela forcera VNC à autoriser uniquement les connexions qui proviennent du serveur sur lequel il est installé.

      À l’étape suivante, vous allez établir un tunnel SSH entre votre ordinateur local et votre serveur. Il incitera essentiellement VNC à penser que la connexion qui se fait à partir de votre ordinateur local provient de votre serveur. Cette stratégie ajoutera une couche de sécurité supplémentaire autour de VNC. En effet, seuls les utilisateurs ayant un accès SSH à votre serveur pourront y accéder.

      Vous verrez une sortie semblable à celle-ci :

      Output

      New 'X' desktop is your_hostname:1 Starting applications specified in /home/sammy/.vnc/xstartup Log file is /home/sammy/.vnc/your_hostname:1.log

      Avec la configuration en place, vous êtes prêt à vous connecter au serveur VNC à partir de votre ordinateur local.

      Étape 3 – Connexion sécurisée au bureau VNC

      VNC n’utilise pas lui-même de protocoles sécurisés lors de la connexion. Pour vous connecter en toute sécurité à votre serveur, vous allez établir un tunnel SSH puis dire à votre client VNC de se connecter en utilisant ce tunnel plutôt que d’établir une connexion directe.

      Créez une connexion SSH sur votre ordinateur local qui transfère en toute sécurité vers la connexion localhost pour VNC. Vous pouvez le faire via le terminal sous Linux ou macOS avec la commande ssh suivante :

      • ssh -L 59000:localhost:5901 -C -N -l sammy your_server_ip

      Voici la définition des options de cette commande ssh :

      • -L 59000:localhost:5901 : le commutateur -L spécifie que le port donné sur l’ordinateur local (59000) doit être transmis à l’hôte et au port sur le serveur de destination (localhost:5901, c’est-à-dire le port 5901 sur le serveur de destination, défini de la manière suivante : your_server_ip). Notez que le port local que vous spécifiez est quelque peu arbitraire. Tant que le port n’est pas déjà lié à un autre service, vous pouvez l’utiliser comme port de transfert pour votre tunnel.
      • -C : cet indicateur active la compression qui peut aider à minimiser la consommation de ressources et à accélérer les choses.
      • -N : cette option indique à ssh que vous ne souhaitez exécuter aucune commande à distance. Ce paramètre est utile lorsque vous souhaitez simplement transférer des ports.
      • -l sammy your_server_ip : le commutateur -l vous permet de spécifier l’utilisateur auquel vous souhaitez vous connecter lors de votre connexion au serveur. Veillez à bien remplacer sammy et your_server_ip par le nom de votre non-root user et l’adresse IP de votre serveur.

      Note : cette commande établit un tunnel SSH qui transfère les informations du port 5901 de votre serveur VNC vers le port 59000 de votre ordinateur local via le port 22 de chaque machine, le port de SSH par défaut. En supposant que vous ayez suivi le Guide de configuration initiale du serveur pour Ubuntu 20.04, vous aurez ajouté une règle UFW pour autoriser les connexions à votre serveur via OpenSSH.

      Cette méthode est plus sûre que d’autoriser les connexions au port 5901 en ouvrant simplement le pare-feu de votre serveur. Cela permettrait à quiconque d’accéder à votre serveur via VNC. En vous connectant via un tunnel SSH, vous limitez l’accès VNC aux machines qui ont déjà un accès SSH au serveur.

      Si vous vous connectez à votre serveur en utilisant PuTTY, vous pouvez créer un tunnel SSH en cliquant droit sur la barre supérieure de la fenêtre du terminal, puis en cliquant sur l’option Change Settings… :

      Cliquez droit sur la barre supérieure pour afficher l'option Modifier les paramètres

      Recherchez la branche Connection dans le menu arborescent, situé à gauche de la fenêtre de Reconfiguration de PuTTY. Développez la branche SSH et cliquez sur Tunnels. Sur l’écran Options controlling SSH port forwarding​​​​​​, saisissez 59000 sous Source Port ​et localhost:5901 sous Destination, de la manière suivante :

      Exemple de configuration de tunnel SSH de PuTTY

      Cliquez ensuite sur le bouton Add, puis sur le bouton Apply pour implémenter le tunnel.

      Une fois le tunnel en cours d’exécution, utilisez un client VNC pour vous connecter à localhost:59000. Vous serez invité à vous authentifier à l’aide du mot de passe défini au cours de l’étape 1.

      Une fois connecté, vous verrez le bureau Xfce par défaut. Il devrait ressembler à cela :

      Connexion VNC au serveur Ubuntu 20.04 avec l'environnement de bureau Xfce

      Vous pouvez accéder aux fichiers dans votre répertoire de base via le gestionnaire de fichiers ou depuis la ligne de commande, comme illustré ici :

      Gestionnaire de fichiers via une connexion VNC à Ubuntu 20.04

      Appuyez sur CTRL+C dans votre terminal local pour arrêter le tunnel SSH et revenir à votre invite. Cela déconnectera également votre session VNC.

      Vous pouvez maintenant configurer votre serveur VNC pour qu’il s’exécute en tant que service systemd.

      Étape 4 – Exécution de VNC en tant que service système

      En configurant le serveur VNC pour qu’il s’exécute en tant que service systemd, comme tout autre service, vous pouvez le démarrer, l’arrêter et le redémarrer au besoin. Vous pouvez également utiliser les commandes de gestion de systemd pour être sûr que VNC se lance au démarrage de votre serveur.

      Créez tout d’abord un nouveau fichier d’unité que vous nommerez /etc/systemd/system/vncserver@.service :

      • sudo nano /etc/systemd/system/vncserver@.service

      Le symbole @ à la fin du nom nous permettra de transmettre un argument que vous pourrez utiliser dans la configuration du service. Vous l’utiliserez pour spécifier le port d’affichage VNC que vous souhaitez utiliser lorsque vous gérez le spécifier

      Ajoutez les lignes suivantes au fichier. Veillez à modifier les valeurs de User, Group et WorkingDirectory, ainsi que le nom d’utilisateur dans la valeur de PIDFILE, en utilisant votre nom d’utilisateur :

      /etc/systemd/system/vncserver@.service

      [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
      

      La commande ExecStartPre arrête VNC s’il est déjà en cours d’exécution. La commande ExecStart lance VNC et définit une profondeur de couleur de 24 bits avec une résolution de 1280×800. Vous pouvez également modifier ces options de démarrage selon vos besoins. Notez également que la commande ExecStart inclut à nouveau l’option -localhost.

      Enregistrez et fermez le fichier.

      Ensuite, informez le système du nouveau fichier d’unité :

      • sudo systemctl daemon-reload

      Activez le fichier d’unité :

      • sudo systemctl enable vncserver@1.service

      Le 1 suivant le signe @ indique le numéro d’affichage sur lequel le service doit apparaître, dans ce cas la valeur par défaut :1, comme mentionné à l’étape 2.

      Arrêtez l’instance actuelle du serveur VNC, si elle est toujours en cours d’exécution.

      Puis, démarrez-le comme vous le feriez pour n’importe quel autre service systemd :

      • sudo systemctl start vncserver@1

      Vous pouvez vérifier qu’il a démarré avec cette commande :

      • sudo systemctl status vncserver@1

      S’il a démarré correctement, la sortie devrait ressembler à ceci :

      Output

      ● vncserver@1.service - Start TightVNC server at startup Loaded: loaded (/etc/systemd/system/vncserver@.service; enabled; vendor preset: enabled) Active: active (running) since Thu 2020-05-07 17:23:50 UTC; 6s ago Process: 39768 ExecStartPre=/usr/bin/vncserver -kill :1 > /dev/null 2>&1 (code=exited, status=2) Process: 39772 ExecStart=/usr/bin/vncserver -depth 24 -geometry 1280x800 :1 (code=exited, status=0/SUCCESS) Main PID: 39795 (Xtightvnc) ...

      Votre serveur VNC est maintenant prêt à être utilisé à chaque démarrage de votre serveur. Vous pouvez le gérer avec les commandes systemctl comme tout autre service systemd.

      Cependant, il n’y aura aucune différence du côté du client. Pour vous reconnecter, redémarrez votre tunnel SSH :

      • ssh -L 59000:localhost:5901 -C -N -l sammy your_server_ip

      Puis, établissez une nouvelle connexion à localhost:59000 à l’aide de votre logiciel client VNC pour vous connecter à votre serveur.

      Conclusion

      Vous disposez maintenant d’un serveur VNC sécurisé fonctionnant sur votre serveur Ubuntu 20.04. Vous pourrez désormais gérer vos fichiers, vos logiciels et vos paramètres grâce à une interface graphique intuitive, ainsi qu’exécuter des logiciels graphiques à distance comme des navigateurs Web.



      Source link