Accéder à une machine VNC dans une page web

Accéder à une machine VNC dans une page web

Après avoir expliqué comment monter un serveur ssh à double authentification, que j’utilise en VPN pour accéder à un PC allumé en permanence chez moi, je vais expliquer ici la deuxième partie de l’installation qui me permet de télécharger des fichiers volumineux (on va appeler ça comme ça) en utilisant un PC de la maison, même quand je suis en voyage.

La solution simple était de monter un serveur VNC tout bête et de forwarder le port 5900 de la Livebox vers le PC VNC. Mais comme je dispose déjà d’un canal ssh chiffré, je voulais faire du VNC dans ce canal. Et comme mon Firefox nomade fait déjà du surf via ce canal (via le proxy ssh local local sur le port 20002 si vous avez bien suivi l’article précédent), il fallait que je trouve une solution pour accéder à VNC via une page web.

Comme toujours la solution au problème existe évidemment : noVNC. Il suffit d’installer ce produit opensource freeware sur le PC Linux à atteindre à la maison, puis de lancer la commande :

./noVNC/utils/launch.sh –vnc localhost:5900

Le programme lance un serveur web qui écoute sur le port 6080 par défaut, et donne l’URL à taper dans un navigateur distant pour accéder à la machine VNC dans le navigateur web en html 5. Mon serveur ayant comme adresse IP fixe 192.168.1.199, l’URL que le soft me donne est :

http://192.168.1.199:6080/vnc.html?host=192.168.1.199&port=6080

En cliquant sur ce lien, la magie opère, j’accède à mon serveur via le navigateur web :

Certes l’URL n’est pas en https mais je m’en fiche puisqu’elle n’est accessible, dans ma configuration personnelle, que via le tunnel ssh qui lui est sécurisé à la fois par mot de passe et par Google authenticator.

La connexion distante en pratique

Quand je suis en mobilité et que je veux accéder au PC qui est chez moi pour télécharger un fichier de gros volume qui m’attendra sur mon disque dur à mon retour, je fais donc en résumé la séquence suivante sur mon PC nomade :

  1. Je lance mon proxy local ssh (écoutant sur le port local 20002) dans un shell en tapant la commande suivante : ssh -2NfCT -D 20002 titi@toto.com (remplacer titi@toto.com par le vrai login@machine_serveur)
  2. Je paramètre Firefox pour qu’il surfe via ce tunnel ssh en branchant Firefox sur le proxy écoutant sur le port 20002
  3. J’accède depuis Firefox à l’URL : http://192.168.1.199:6080/vnc.html?host=192.168.1.199&port=6080

Automatisation côté serveur

Pour que ce soit utilisable en pratique, il faut que tout soit automatisé côté serveur. J’ai d’abord donné une adresse IP locale fixe au serveur (192.168.1.199). Ensuite j’ai fait en sorte que ce serveur soit visible sur Internet en prenant une adresse DNS gratuite chez noip.com. Enfin je forwarde le port 22 (ssh) depuis ma Livebox vers mon PC VNC.

Sur le PC VNC lui-même, j’ai mis un petit programme à moi qui le reboote toutes les 24h. Avant je ne le faisais pas, je comptais sur la stabilité dans le temps de Linux. Sauf que ça c’était avant. Dans les années 90 on pouvait effectivement laisser tourner Linux des mois ça ne bougeait pas. Aujourd’hui, si je ne mets pas un reboot automatique toutes les 24h, je suis certain de perdre ma connexion avec mon PC maison au bout de 2 ou 3 jours.

Donc je reboote automatiquement le PC VNC toutes les 24h (petit programme en C que je pourrai fournir à ceux qui le réclameront). Du coup j’ai paramétré mon compte utilisateur pour qu’il se connecte automatiquement au boot. En effet, j’ai aussi besoin de lancer le serveur VNC au boot, donc il faut que mon utilisateur se connecte automatiquement puisque, par définition, je suis absent (en mobilité).

Pour que le serveur VNC soit lancé automatiquement à la connexion (automatique elle aussi) de mon utilisateur, il suffit de lancer une fois :

gnome-session-properties

et d’y renseigner une ligne de commande à lancer à la connexion, en l’occurence ici :

/usr/bin/x11vnc -passwd mot_de_passe -forever

Le serveur VNC sera ainsi lancé systématiquement au boot.

Il ne reste plus qu’à s’assurer que le serveur noVNC (VNC dans l’interface web) sera lui aussi lancé au boot de la machine. Pour cela, rien de plus simple, il suffit de rajouter la ligne suivante dans le fichier /etc/rc.local :

/chemin/noVNC/utils/launch.sh –vnc localhost:5900

Chemin étant à remplacer par le chemin exact de l’endroit où l’on a mis noVNC. Et 5900 c’est évidemment le port sur lequel écoute le serveur VNC lancé dans gnome-session-properties

Avec ce couplage ssh+noVNC+VNC, on dispose d’une machine dont l’accès via Internet est quand même très bien sécurisé, et qui permet pour autant pour celui qui dispose des sesames d’entrée de prendre le contrôle complet d’une machine distante, et ce en utilisant un simple navigateur Internet.