Mémento GNU/Linux
Linux - VNC à travers un tunnel SSH
Pré-requis côté serveur sous Linux
SSHD
- SSHD doit tourner sur la machine linux distante. C'est ce démon qui s'occupe d'établir les connexions sécurisées et les tunnels cryptés.
L'installation et la configuration de SSHD n'est pas l'objet de ce document.
- Vérification que sshd fonctionne (distributions RedHat, Mandriva).
[root@machine_distante ~]# service sshd status
sshd (pid 3296) est en cours d'exécution...
VNC
- Vérifier si x11vnc est installé sur la machine distante.
[root@machine_distante ~]# rpm -q x11vnc
x11vnc-0.9.9-2mdv2010.1
Sinon installer le paquet x11vnc pour disposer d'un serveur vnc sur la session courante.
Le paquet vncserver n'est pas adapté à la prise de contrôle de la session active.
[root@machine_distante ~]# urpmi x11vnc
Utilisation depuis Linux
Pré-requis côté client sous Linux
- Vérifier si le client ssh ainsi que le client vncviewer sont installés sur la machine locale
[user@machine_locale ~]# rpm -q openssh vnc
openssh-5.5p1-2mdv2010.1
vnc-4.1.2-2mdv2008.1
Sinon installer les paquets openssh et vnc.
[root@machine_distante ~]# urpmi openssh vnc
Lancement manuel
- Dans un terminal sur la machine locale, lancer le serveur x11vnc distant :
[user@machine_locale ~]# ssh machine_distante 'x11vnc -display :0'
Dans un autre terminal sur la machine locale, lancer le viewer vnc :
[user@machine_locale ~]# vncviewer machine_distante
Si tout s'est bien passé, vous venez de prendre la main sur la machine distante.
Par défaut, le serveur x11vnc s'arrêtera à la déconnexion du client.
Passer par un tunnel
- L'inconvénient de cette méthode est que vnc passe par un port non crypté (5900 pour le display :0).
Pour traverser une box ou un routeur il faut ouvrir des ports spécifiques pour vnc.
- L'idéal est de passer par un tunnel. Seul le port 22 pour ssh est routé dans la box, tout ce qui passe à travers est crypté
ainsi que les tunnels qu'il ouvrira.
[user@machine_locale ~]# ssh -L 5900:localhost:5900 machine_distante 'x11vnc -display :0'
Pour connecter le client à l'autre bout du tunnel
[user@machine_locale ~]# vncviewer localhost
Automatisation et réglages
- Toutes ces commandes peuvent être rassemblées dans un script unique :
#!/bin/bash
# Lance le serveur vnc sur la machine distante et le viewer sur la machine locale
ssh -t -L 5900:localhost:5900 machine_distante 'x11vnc -noxdamage -display :0' &
sleep 2
vncviewer localhost:0
L'option -t de ssh est utile si on lance ce script depuis un menu.
L'option -noxdamage de x11vnc évite les problèmes d'affichage avec Compiz-Fusion par exemple.
La commande sleep 2 laisse le temps au serveur de démarrer, cette valeur peut être affinée.
Utilisation depuis Windows
Pré-requis côté client sous Windows
Configuration de PuTTY
- Dans Session : Renseigner Host Name avec le nom ou l'adresse IP de la machine distante.
- Dans Session : S'assurer que Connection type est sur SSH.
- Dans Session : Donner un nom à votre session dans Saved Sessions et faites une première fois Save.
- Dans Connection/Data : Renseigner le champ Auto-login username avec votre login utilisateur.
- Dans Connection/SSH : Mettre dans Remote command : x11vnc -noxdamage -display :0
- Dans Connection/SSH/Tunnels : Mettre dans Source port la valeur 5900 et dans Destination :
localhost:5900, puis cliquer sur Add.
Le tunnel est ajouté dans la liste Forwarded ports.
- Retourner dans Session et cliquez sur Save, tous les paramètres sont sauvegardés.
Utilisation
- Il n'y a plus qu'à cliquer sur le bouton Open de PuTTY pour ouvrir notre session sauvegardée.
- PuTTY demande un mot de passe et ensuite lance le serveur x11vnc.
- Réduire cette fenêtre et ne plus y toucher. Elle se fermera automatiquement quand le client VNC se déconnectera.
- Démarrer Vnc Viewer. A la demande de connexion, saisir localhost et valider.