Mise en place d’un serveur VNC et tunnel SSH

Voici un court tutoriel pour utiliser VNC sur une machine CentOS et ainsi accéder à une (ou des) session(s) X. En ce qui me concerne, je l’utilise ponctuellement pour avoir accès au bureau XFCE de mon serveur dédié.

Installation du paquet

L’installation se fait toujours avec yum, pour CentOS 5.x et Fedora avant F11:

# yum install vnc-server

Pour CentOS 6.x et Fedora après F11, on utilise TigerVNC :

# yum install tigervnc-server

Attribuer un mot de passe VNC à l’utilisateur

Se connecter en tant que l’utilisateur pour l’accès VNC, puis lui attribuer un mot de passe avec cette commande :

vncpasswd

Ceci va créer le répertoire .vnc et stocker le mot de passe.

Configurer le serveur

Il faut éditer le fichier /etc/sysconfig/vncservers avec quelque chose comme ceci :

VNCSERVERS="2:fabien toto:6"
VNCSERVERARGS[2]="-geometry 1024x768 -localhost"
VNCSERVERARGS[6]="-geometry 800x600"

Ce qui signifie que fabien va avoir un écran de 1024x768px accessible sur le port VNC 2 (port VNC 5900 + 2 = 5902) seulement en local, alors que toto utilisera le port 6 avec une résolution de 800x600px.

Démarrage et initialisation du serveur

Le serveur doit etre lancé une fois pour initialiser le fichier de configuration ~/.vnc/xstartup des utilisateurs :

# /sbin/service vncserver start
# /sbin/service vncserver stop

Il ne reste plus que quelques modifications à effectuer pour accéder à sa session à distance. Dans le cas de XFCE, je remplace simplement twm & par startxfce4 & (gnome-session & pour Gnome ou startkde & pour KDE). La ligne XKL_XMODMAP_DISABLE=1 est nécessaire pour éviter des problèmes de mappage de clavier, il est bon de ne pas l’oublier. Voici mon fichier xstartup :

#!/bin/sh

# Uncomment the following two lines for normal desktop:
#unset SESSION_MANAGER
#exec /etc/X11/xinit/xinitrc

[ -x /etc/vnc/xstartup ] && exec /etc/vnc/xstartup
[ -r $HOME/.Xresources ] && xrdb $HOME/.Xresources
xsetroot -solid grey
vncconfig -iconic &
xterm -geometry 80x24+10+10 -ls -title "$VNCDESKTOP Desktop" &
#twm &
startxfce4 &

Tunnel SSH

L’option -localhost n’autorise l’accès qu’en local. Pour accèder à ce serveur en VNC il faut donc au préalable établir une connexion SSH entre la machine cliente et celui-ci en créant un tunnel qui redirigera le port 5904 du serveur vers le port – par exemple – 6004 du client. Voici comment instancier cette connexion SSH depuis un client linux :

$ ssh -L 6002:localhost:5902 IP_SERVEUR

Et voici la configuration de ce tunnel avec puTTY sous Windows :

Une fois la connexion effectuée, il suffit d’utiliser son client VNC avec localhost et le port 6004 pour accéder au serveur en toute sécurité. En ligne de commande sous linux avec le client vncviewer :

$ vncviewer localhost:6002

Et sous Windows par exemple avec le client UltraVNC :

De cette façon, il n’est pas possible de se connecter à la machine depuis une autre IP que la locale (127.0.0.1).

1 thought on “Mise en place d’un serveur VNC et tunnel SSH”

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *