Certains utilisateurs louent un VPS Windows relativement bon marché pour exécuter les services Bureau à distance. La même chose peut être faite sous Linux sans placer votre propre matériel dans le centre de données ou louer un serveur dédié. Quelqu'un a besoin d'un environnement graphique familier pour les tests et le développement, ou d'un bureau distant avec une large bande passante pour travailler à partir d'appareils mobiles. Il existe de nombreuses utilisations pour Virtual Network Computing (VNC) basé sur le protocole Remote FrameBuffer (RFB). Dans un court article, nous allons vous montrer comment le configurer sur une machine virtuelle avec n'importe quel hyperviseur.
Table des matières:
Sélection d'un serveur VNC
Installation et configuration
Démarrage d'un service via systemd
Connexion à un bureau
Choisir un serveur VNC
Le service VNC peut être intégré au système de virtualisation, tandis que l'hyperviseur le connectera aux périphériques émulés et aucune configuration supplémentaire n'est requise. Cette option implique une surcharge importante et n'est pas prise en charge par tous les fournisseurs - même dans une implémentation moins gourmande en ressources, lorsqu'une abstraction simplifiée (framebuffer) est transférée vers une machine virtuelle au lieu d'émuler un véritable périphérique graphique. Parfois, un serveur VNC se liera à un serveur X en cours d'exécution, mais cette méthode est plus appropriée pour accéder à une machine physique, tandis que sur une machine virtuelle, elle crée un certain nombre de difficultés techniques. Le moyen le plus simple consiste à installer un serveur VNC avec un serveur X intégré. Il ne nécessite pas de périphériques physiques (adaptateur vidéo, clavier et souris) ni leur émulation à l'aide d'un hyperviseur, et convient donc à tout type de VPS.
Installation et configuration
Nous avons besoin d'une machine virtuelle avec Ubuntu Server 18.04 LTS dans la configuration par défaut. Il existe plusieurs serveurs VNC dans les référentiels standard de cette distribution: TightVNC , TigerVNC , x11vnc et autres. Nous nous sommes installés sur TigerVNC - un fork réel non pris en charge par le développeur TightVNC. Les autres serveurs sont configurés de la même manière. Vous devez également choisir un environnement de bureau: à notre avis, XFCE sera l'option optimale en raison des exigences relativement faibles en ressources informatiques. Les personnes intéressées peuvent installer un autre DE ou WM: tout dépend de leurs préférences personnelles, mais le choix du logiciel affecte directement le besoin de RAM et de cœurs de calcul.
L'installation de l'environnement de bureau avec toutes les dépendances se fait avec la commande suivante:
sudo apt-get install xfce4 xfce4-goodies xorg dbus-x11 x11-xserver-utils
Ensuite, vous devez installer le serveur VNC:
sudo apt-get install tigervnc-standalone-server tigervnc-common
L'exécuter en tant que root est une mauvaise idée. Créer un utilisateur et un groupe:
sudo adduser vnc
Ajoutons l'utilisateur au groupe sudo afin qu'il puisse résoudre les tâches liées à l'administration. S'il n'y a pas un tel besoin, vous pouvez ignorer cette étape:
sudo gpasswd -a vnc sudo
L'étape suivante consiste à démarrer le serveur VNC avec les privilèges d'utilisateur vnc pour créer un mot de passe sécurisé et des fichiers de configuration dans le répertoire ~ / .vnc /. La longueur du mot de passe peut être de 6 à 8 caractères (les caractères supplémentaires sont coupés). Si nécessaire, un mot de passe en lecture seule est également défini, c.-à-d. sans accès au clavier et à la souris. Les commandes suivantes sont exécutées en tant qu'utilisateur vnc:
su - vnc
vncserver -localhost no
Par défaut, le protocole RFB utilise la plage de ports TCP 5900 à 5906 - c'est ce qu'on appelle. les ports d'affichage, chacun correspondant à un écran de serveur X. Dans ce cas, les ports sont associés à des écrans de: 0 à: 6. L'instance de serveur VNC que nous avons démarrée écoute sur le port 5901 (écran: 1). D'autres instances peuvent fonctionner sur d'autres ports avec des écrans: 2 ,: 3, etc. Avant de poursuivre la configuration, vous devez arrêter le serveur:
vncserver -kill :1
La commande doit afficher quelque chose comme le message suivant: "Tuer le processus Xtigervnc ID 18105 ... succès!".
Lorsque TigerVNC démarre, il exécute le script ~ / .vnc / xstartup pour définir les paramètres de configuration. Créons notre propre script, après avoir sauvegardé au préalable une copie de sauvegarde de l'existant, s'il existe:
mv ~/.vnc/xstartup ~/.vnc/xstartup.b
nano ~/.vnc/xstartup
Une session d'environnement de bureau XFCE est démarrée par le script xstartup suivant:
#!/bin/bash
unset SESSION_MANAGER
unset DBUS_SESSION_BUS_ADDRESS
xrdb $HOME/.Xresources
exec /usr/bin/startxfce4 &
La commande xrdb est requise pour que VNC puisse lire le fichier .Xresources dans le répertoire de base. Là, l'utilisateur peut définir divers paramètres du bureau graphique: rendu des polices, couleurs du terminal, thèmes de curseur, etc. Le script doit être rendu exécutable:
chmod 755 ~/.vnc/xstartup
Ceci termine la configuration du serveur VNC. Si vous l'exécutez avec la commande vncserver -localhost no (au nom de l'utilisateur vnc), vous pouvez vous connecter avec le mot de passe précédemment défini et voir l'image suivante:
Démarrer un service via systemd
Le démarrage manuel d'un serveur VNC n'est pas bien adapté à une utilisation au combat, nous allons donc configurer un service système. Les commandes sont exécutées en tant que root (utilisez sudo). Commençons par créer un nouveau fichier unité pour notre serveur:
sudo nano /etc/systemd/system/vncserver@.service
Le symbole @ dans le nom vous permet de passer un argument pour configurer le service. Dans notre cas, il définit le port d'affichage VNC. Un fichier d'unité se compose de plusieurs sections:
[Unit]
Description=TigerVNC server
After=syslog.target network.target
[Service]
Type=simple
User=vnc
Group=vnc
WorkingDirectory=/home/vnc
PIDFile=/home/vnc/.vnc/%H:%i.pid
ExecStartPre=-/usr/bin/vncserver -kill :%i > /dev/null 2>&1
ExecStart=/usr/bin/vncserver -depth 24 -geometry 1280x960 :%i
ExecStop=/usr/bin/vncserver -kill :%i
[Install]
WantedBy=multi-user.target
Ensuite, vous devez informer systemd de l'apparition d'un nouveau fichier et l'activer:
sudo systemctl daemon-reload
sudo systemctl enable vncserver@1.service
Le numéro 1 dans le nom indique le numéro de l'écran.
Nous arrêtons le serveur VNC, le démarrons en tant que service et vérifions l'état:
# vnc
vncserver -kill :1
#
sudo systemctl start vncserver@1
sudo systemctl status vncserver@1
Si le service est en cours d'exécution, nous devrions obtenir quelque chose comme ça.
Connexion au bureau
Notre configuration n'utilise pas de cryptage, donc les paquets réseau peuvent être interceptés par des attaquants. De plus, des vulnérabilités se trouvent souvent dans les serveurs VNC , vous ne devez donc pas les ouvrir pour accéder à partir d'Internet. Pour vous connecter en toute sécurité sur l'ordinateur local, vous devez regrouper le trafic dans un tunnel SSH, puis configurer le client VNC. Sous Windows, vous pouvez utiliser un client SSH graphique (par exemple PuTTY). Pour des raisons de sécurité, TigerVNC sur le serveur n'écoute que localhost et n'est pas directement accessible depuis les réseaux publics:
sudo netstat -ap |more
Sur Linux, FreeBSD, OS X et autres systèmes d'exploitation de type UNIX, le tunnel depuis l'ordinateur client se fait à l'aide de l'utilitaire ssh (sshd doit être exécuté sur le serveur VNC):
ssh -L 5901:127.0.0.1:5901 -C -N -l vnc vnc_server_ip
L'option -L lie le port 5901 de la connexion distante au port 5901 sur l'hôte local. L'option -C active la compression et -N indique à ssh de ne pas exécuter de commande à distance. L'option -l spécifie la connexion pour la connexion à distance.
Après avoir configuré le tunnel sur l'ordinateur local, vous devez démarrer le client VNC et établir une connexion à l'hôte 127.0.0.1:5901 (localhost: 5901) en utilisant le mot de passe défini précédemment pour accéder au serveur VNC. Nous pouvons désormais communiquer en toute sécurité via un tunnel crypté avec l'environnement de bureau graphique XFCE sur le VPS. Dans la capture d'écran, l'utilitaire supérieur s'exécute dans l'émulateur de terminal pour montrer la consommation insignifiante de ressources informatiques par la machine virtuelle. Ensuite, tout dépendra des applications utilisateur.
Vous pouvez installer et configurer un serveur VNC sous Linux sur presque tous les VPS. Cela ne nécessite pas de configurations coûteuses et gourmandes en ressources avec l'émulation de carte vidéo ou l'achat de licences logicielles commerciales. En plus de l'option de service système que nous avons envisagée, il y en a d'autres: démarrage en mode démon (via /etc/rc.local) au démarrage du système ou à la demande via inetd. Ce dernier est intéressant pour créer des configurations multi-utilisateurs. Le superserveur Internet démarrera le serveur VNC et lui associera le client, et le serveur VNC créera un nouvel écran et démarrera une session. Pour l'authentification à l'intérieur, vous pouvez utiliser un gestionnaire d'affichage graphique (par exemple, LightDM ), et après avoir déconnecté le client, la session sera fermée et tous les programmes fonctionnant avec l'écran seront terminés.