Vendredi 23 novembre 2018 (Modifié le Vendredi 23 novembre 2018)

KVM Ubuntu Server 16.04 + Xfce + Vnc

Créer un bureau distant XFCE sur une installation Ubuntu Server avec une connexion VNC via tunnel SSH

Serveur VPS vps-25942
Distribution : Ubuntu Server 16.04

Créer un utilisateur

Se connecter en SSH
ssh root@185.41.154.156
Ajouter un utilisateur ubun
adduser ubun
Ajout au groupe sudo
usermod -aG sudo ubun
Basculer sur le compte utilisateur
su - ubun
Tester sudo
sudo -s mot de passe utilisateur à saisir
Basculement sans mot de passe echo "ubun ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers

SSH via clé

sur l'ordinateur de bureau Générer une paire de clé curve25519-sha256 (ECDH avec Curve25519 et SHA2) nommé kvm-ubuntu pour une liaison SSH avec le serveur KVM.
ssh-keygen -t ed25519 -o -a 100 -f ~/.ssh/kvm-ubuntu
Envoyer la clé publique sur le serveur KVM
scp ~/.ssh/kvm-ubuntu.pub ubun@185.41.154.156:/home/ubun/

sur le serveur KVM On se connecte
ssh ubun@185.41.154.156
Copier le contenu de la clé publique dans /home/$USER/.ssh/authorized_keys
$ cd ~
Sur le KVM ,créer un dossier .ssh et copier la clé publique

pwd  #pour vérifier que l'on est sous /home/$USER
mkdir .ssh
cat /home/$USER/kvm-ubuntu.pub >> /home/$USER/.ssh/authorized_keys

et donner les droits
chmod 600 /home/$USER/.ssh/authorized_keys
effacer le fichier de la clé
rm /home/$USER/kvm-ubuntu.pub
Installer nano (pas présent sur ubuntu)
sudo apt install nano
Modifier la configuration serveur SSH
sudo nano /etc/ssh/sshd_config
Modifier

Port = 55026
PermitRootLogin no
PasswordAuthentication no

Relancer openSSH
sudo systemctl restart sshd

Accès depuis le poste distant avec la clé privée
$ ssh -p 55025 -i ~/.ssh/kvm-ubuntu ubun@185.41.154.156
Changer le mot de passe root

Connexion bureau distant ubuntu via vnc

How to Install and Configure VNC on Ubuntu 16.04
Sécuriser une connexion VNC via SSH

On dispose d’un serveur ubuntu joignable par connexion SSH, on installe un bureau XFCE et un serveur VNC

Etape 1 - Installer environnement bureau XFCE et le serveur VNC

Installer le package TightVNC disponible dans le dépôt officiel d’Ubuntu.
sudo apt install xfce4 xfce4-goodies tightvncserver
Lancer le serveur pour créer le mot de passe
vncserver

Etape 2 - Configurer le serveur VNC

Tout d’abord, nous devons indiquer à notre serveur VNC quelles commandes effectuer lors de son démarrage. Ces commandes sont situées 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é vncserver à l’étape précédente, mais nous avons besoin de modifier certaines des commandes pour le bureau Xfce.
Lorsque VNC est configuré pour la première fois, il lance une instance de serveur par défaut sur le port 5901. Ce port s’appelle un port d’affichage et est désigné par VNC comme :1. VNC peut lancer plusieurs instances sur d’autres ports d’affichage, comme :2,:3, etc. Lorsque vous travaillez avec des serveurs VNC, rappelez-vous que :X est un port d’affichage qui fait référence à 5900+X.

Parce que nous allons modifier la configuration du serveur VNC, nous devrons d’abord arrêter l’instance du serveur VNC en cours d’exécution sur le port 5901.
vncserver -kill :1
Killing Xtightvnc process ID 6749

Avant de commencer à configurer le nouveau fichier xstartup, sauvegardons l’original.
mv ~/.vnc/xstartup ~/.vnc/xstartup.bak
Recréer un fichier xstartup
nano ~/.vnc/xstartup
Collez ces commandes dans le fichier afin qu’elles soient effectuées automatiquement chaque fois que vous démarrez ou redémarrez le serveur VNC, puis enregistrez et fermez le fichier.

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

La première commande du fichier, xrdb $HOME/.Xresources, indique au framework GUI de VNC de lire le fichier .Xresources de l’utilisateur du serveur.
.Xresources est l’endroit où un utilisateur peut apporter des modifications à certains paramètres du bureau graphique, comme les couleurs des terminaux, les thèmes du curseur et le rendu des polices.
La troisième commande indique simplement au serveur de lancer lxde, où vous trouverez tous les logiciels graphiques dont vous avez besoin pour gérer votre serveur de façon confortable.

Pour s’assurer que le serveur VNC pourra utiliser ce nouveau fichier de démarrage correctement, nous devrons lui accorder des privilèges exécutables.
sudo chmod +x ~/.vnc/xstartup
Maintenant, redémarrez le serveur VNC pour le test.
vncserver

New 'X' desktop is vps-25942.fhnet.fr:1

Starting applications specified in /home/ubun/.vnc/xstartup
Log file is /home/ubun/.vnc/vps-25942.fhnet.fr:1.log

Etape 3 - Tester le bureau Vnc

Dans cette étape, nous testerons la connectivité de votre serveur VNC.

Tout d’abord, nous devons créer une connexion SSH sur votre ordinateur local qui remplace de manière sécurisée la connexion localhost pour VNC.
Vous pouvez le faire via le terminal sous Linux ou OS X avec la commande suivante.
ssh -l utilisateur -L 55444:localhost:5901 192.168.1.10 sans clé SSH
Ensuite, vous pouvez maintenant utiliser un client VNC pour tenter une connexion au serveur VNC sur localhost:55444. Vous serez invité à vous authentifier.

  • c’est l’option L qui permet de créer le tunnel ssh
  • 55444 sera le nouveau port à utiliser sur sa machine locale
  • *localhost dans ce cas-ci est la machine à atteindre à partir du serveur distant 192.168.1.10
  • 5901 est le port de la machine à atteindre pour la connexion VNC (écran :1), dans ce cas on travail sur localhost car c’est la même machine
  • 192.168.1.10 est l’IP de la machine distante ayant sshd (elle pourrait être différente de la machine à atteindre dans un autre cas)

Cas du serveur avec clé authentification SSH
ssh -p 55025 -i ~/.ssh/kvm-ubuntu -L 5901:localhost:5901 -N -f -l ubun 185.41.154.156

Etape 4 - Créer un service vnc

Ensuite, nous configurons le serveur VNC en tant que service système.
Cela permettra de démarrer, arrêter et redémarrer le cas échéant, comme tout autre service système.
Tout d’abord, créez un nouveau fichier d’unité appelé /etc/systemd/system/vncserver@.service en utilisant votre éditeur de texte préféré: sudo nano /etc/systemd/system/vncserver@.service
Copiez et collez le suivant. Assurez-vous de modifier la valeur de l’utilisateur et le nom d’utilisateur dans la valeur de PIDFILE pour correspondre à votre nom d’utilisateur.

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

[Service]
Type=forking
User=ubun
PAMName=login
PIDFile=/home/ubun/.vnc/%H:%i.pid
ExecStartPre=-/usr/bin/vncserver -kill :%i > /dev/null 2>&1
ExecStart=/usr/bin/vncserver -depth 24 -geometry 1280x800 :%i
ExecStop=/usr/bin/vncserver -kill :%i

[Install]
WantedBy=multi-user.target

Enregistrez et fermez le fichier.
Ensuite, rendez le système au courant du nouveau fichier système.
sudo systemctl daemon-reload
Activez le fichier système
sudo systemctl enable vncserver@1.service
Arrêtez l’instance actuelle du serveur VNC si elle est toujours en cours d’exécution.
vncserver -kill :1
Ensuite, démarrez-le
` sudo systemctl start vncserver@1 Vous pouvez vérifier l'état avec cette commande: sudo systemctl status vncserver@1`
Si cela a commencé correctement, la sortie devrait ressembler à ceci:

...
   Active: active (running) since Thu 2017-09-14 16:29:59 UTC; 1min 10s ago
  Process: 675 ExecStart=/usr/bin/vncserver -depth 24 -geometry 1280x800 :%i (code=exited, status=0/SUCCESS)
...
Sep 14 16:29:57 vps-25942.fhnet.fr systemd[1]: Starting Start TightVNC server at startup...
Sep 14 16:29:57 vps-25942.fhnet.fr systemd[657]: pam_unix(login:session): session opened for user ubun by (uid=0)
Sep 14 16:29:58 vps-25942.fhnet.fr systemd[675]: pam_unix(login:session): session opened for user ubun by (uid=0)
Sep 14 16:29:59 vps-25942.fhnet.fr systemd[1]: Started Start TightVNC server at startup.

Conclusion

Vous disposez d’un serveur VNC sécurisé sur votre Ubuntu Server 16.04.
Maintenant, vous pourrez gérer vos fichiers, vos logiciels et vos paramètres avec une interface graphique facile à utiliser et familière.