J'ai eu récemment à résoudre le problème suivant : prendre le contrôle à distance de mon PC sous linux, situé derrière un routeur/pare-feu, depuis un PC sous Windows XP, situé lui aussi derrière un pare-feu, le tout à travers l'internet, bien sûr :-)
Les quelques paragraphes suivants résument les manipulations à effectuer pour parvenir à ce résultat.
Dans ce qui suit, PC distant désigne le PC sous linux, dont je veux prendre le contrôle à distance. Et PC local désigne le PC sous Windows. Globalement, voici ce qu'il faut réaliser :
Maintenant, en détail, voici les manipulations à effectuer :
Session
Host Name : <adresseRouteurPareFeuDistant>
# Si adresse IP dynamique, voir plus loin.
Port : 22 # ssh
Connection
Proxy
Proxy type : SOCKS 5 # selon le proxy réseau local
Proxy hostname : <adresseProxy>
Port : <portProxy>
SSH
Tunnels : L5905 127.0.0.1:5900
emerge x11vnc
mkdir .vnc
x11vnc -storepasswd 'unmotdepasse' $HOME/.vnc/passwd
x11vnc -display :0 -rfbauth $HOME/.vnc/passwd
(l'utilisation du mot de passe x11vnc n'est pas nécessaire dans une configuration où le PC distant vous appartient)
A noter que sous linux, contrairement à Windows, VNC peut être utilisé de deux façons bien distinctes :
Mon besoin était la prise de contrôle à distance. C'est donc la mise en place de la deuxième possibilité qui est décrite ici...
Enfin, je laisse au lecteur le soin de déterminer les paramètres à utiliser pour obtenir la meilleure compression possible des échanges de données entre le PC distant et le PC local... :-)
Le programme connect-proxy doit être installé. Il figure normalement dans les paquets standards de la distribution utilisée, sous le nom de connect-proxy.
Créer dans le répertoire utilisateur le sous-répertoire .ssh/, avec un fichier nommé config, au contenu suivant :
Host <PCdistant>
ProxyCommand connect-proxy -5 -S <adresseProxt>:<portProxy> %h %p
Se connecter en ssh au PC distant par la commande
ssh -L5905:127.0.0.1:5900 <adresseRouteurPareFeuDistant> \
-l <utilisateurDistant>
Une fois connecté, lancer x11vnc sur le PC distant : x11vnc -display :0 (comme vu ci-dessus, le mot de passe n'est pas forcément utile).
Puis lancer vncviewer sur le PC local, en indiquant l'adresse 127.0.0.1 et l'écran 5 (127.0.0.1:5). Pour améliorer les performances, ajouter les options -encodings tight -compresslevel 5 à la commande vncviewer.
Lorsque l'on utilise le client VNC Maemo, la frappe de chaque caractère se traduit par le doublage de celui-ci à l'affichage. Ce qui rend inutilisable une connexion VNC...
Plusieurs solutions sont indiquées ici. J'ai essayé celle qui consiste à démarrer le serveur x11vnc avec l'option -skip_dups : elle fonctionne.
Il est possible qu'aucun proxy SOCKS ne soit disponible, pour le réseau derrière le proxy. Dans ce cas, il est possible d'utiliser le port 443 (HTTPS) qui lui est toujours ouvert.
Par ailleurs, le programme connect-proxy peut être remplacé par la commande nc. Ce qui au final donne, pour le fichier de configuration ssh :
Host <PCdistant>
ProxyCommand /bin/nc -X connect -x <adresseProxy>:<portProxy> %h %p
Port 443
La commande SSH reste identique à celle présentée plus haut.