Voici donc la ligne de commande :
ssh -t -L localhost:5900:localhost:5900 -p 2626 rose@rose.example.org 'x11vnc -localhost'
Les options :
-t Force pseudo-tty allocation.
A vrai dire, cette option provient du "man x11vnc", et je ne comprends pas vraiment à quoi elle sert. Par contre, je m'aperçois que cette page de manuel contient la fameuse ligne de commande ci-dessus, dont je ne me souviens jamais.
-L [bind_address:]port:host:hostport
This works by allocating a socket to listen to port on the local side, optionally bound to the specified bind_address. Whenever a connection is made to this port, the connection is forwarded over the secure channel, and a connection is made to host port hostport from the remote machine.
(...)
The bind_address of “localhost” indicates that the listening port be bound for local use only.
Donc ssh (le client) écoutera sur le port 5900 de l'interface 127.0.0.1 de ma machine (je n'ai pas envie qu'il écoute sur toutes les interfaces, c'est l'objet du premier "localhost:5900"), et il redirigera les connexions faites sur ce port, vers le port 5900 de l'interface 127.0.0.1 de la machine distante (celle de Mademoiselle Rose, c'est l'objet du second "localhost:5900"). On peut indiquer d'autres ports que 5900, mais il n'y a pas d'intérêt pour cet exemple.
-p port
Port to connect to on the remote host.
Euh, bon. Là, c'est à dire que j'avais mis un chouilla de "sécurité par l'obscurité" sur la machine de Mademoiselle Rose. Son démon sshd écoute donc sur le port 2626, qui, si je ne me suis pas trop planté, devrait être le seul port de sa machine qui puisse être joint depuis Internet. C'est pas la gloire, mais c'est comme ça. En temps normal, on peut supprimer ce paramètre "-p 2626".
rose@rose.example.org
Ici, j'indique à ssh de se connecter sur la machine de Mademoiselle Rose et sur son compte. La connexion sur le compte personnel de Mademoiselle Rose permet ensuite à x11vnc de pouvoir se connecter à son serveur X. Pour le nom de machine, j'ai configuré un compte d'enregistrement DNS dynamique sur sa "box" Internet. On peut utiliser les services de dyndns, par exemple. Pour protéger les innocents, les noms de comptes, les noms de machines, et les ports ont été changés dans cet exemple. A ce sujet, le domaine example.org existe vraiment. Sa fonction est définie ici.
'x11vnc -localhost'
D'après le "man x11vnc" :
As a special case, the option "-localhost" implies "-listen localhost".
(...)
-localhost : Basically the same as "-allow 127.0.0.1".
C'est la commande qui sera exécutée sur la machine de Mademoiselle Rose, une fois la connexion ssh établie. Le programme x11vnc est ainsi lancé à la demande (il faut pour cela que la commande existe sur sa machine). Il écoutera uniquement sur l'interface 127.0.0.1 (la ceinture), et il n'acceptera de connexion que depuis l'adresse 127.0.0.1 (et les bretelles). Je ne configure pas de mot de passe pour se connecter au serveur x11vnc. Le seul mot de passe demandé sera celui du compte rose sur la machine de Mademoiselle Rose, ça suffit bien.
Ensuite, il ne me reste plus qu'à lancer un client VNC (un viewer) sur mon ordinateur, en lui demandant de se connecter au pseudo-serveur VNC qui écoute sur le port 5900 de l'interface 127.0.0.1 de ma machine. La page de manuel de x11vnc propose d'utiliser la commande suivante :
vncviewer -encodings 'copyrect tight zrle hextile' localhost:0
Pour le coup, mon vncviewer (xtightvncviewer) fonctionne, mais il m'indique ne pas connaître l'option 'zrle', ce qui n'est pas bien grave.
Une autre solution est d'utiliser le client VNC installé par défaut sous Ubuntu (qui se nomme "vinagre"). Il se trouve dans le menu "Applications">"Internet">"Remote Desktop Viewer". Il faut lui demander une connexion vers l'hôte "localhost:5900".
vinagre localhost
Aucun commentaire:
Enregistrer un commentaire