Tunnel SSH pour X11…

Je ne sais pas pour quelle raison ssh -X ne fonctionnait pas aujourd’hui à travers mes serveurs. Impossible de dire si j’étais mal réveillé ou si c’était autre chose et pas le temps d’y consacrer des heures; toujours est-il que vous pouvez obtenir la même fonctionnalité avec « ssh -R » et ainsi rebondir entre plusieurs serveurs tout en gardant votre DISPLAY. Merci à mes collègues pour le truc que je vais expliquer ci-dessous :

Etapes 1 : Vérifier que votre serveur X fonctionne avec TCP/IP

Si vous utilisez linux, il est possible que votre serveur X n’écoute pas sur TCP/IP et utilise simplement un pipe. Débrouillez-vous pour que votre serveur X soit configuré avec TCP/IP !

  • Sur Ubuntu, le menu « System | Administration | Window Login | Security » permet d’activer cette fonctionnalité.
  • Si vous utilisez Windows et Cygwin, le paramétrage par défaut doit fonctionner après que vous ayez démarrer le serveur X.

Pour vérifiez que le DISPLAY :0 est bien accessible sur votre poste de travail la commande suivante doit retourner une ligne indiquant que le serveur X est bien en écoute sur TCP/IP

netstat -a|grep -e x11 -e 6000

Vous pouvez ensuite autoriser les accès X distant à votre machine et le serveur X avec les commandes

xhost +
export DISPLAY=localhost:0.0
xclock

L’horloge doit s’afficher sur votre serveur X; Ce n’est pas très sécurisé et je vous laisse peaufiner !

Etape 2 : Connectez-vous sur une autre machine en re-dirigeant les accès au port que vous choisissez sur la machine distante vers le port 6000 de votre machine locale

L’option -R permet de rediriger les accès TCP/IP au premier port spécifié (ici 6005) sur le serveur distant (ici serveurdistant) sur l’adresse et port précisés dans la seconde partie de l’option -R. Dans ce cas, localhost est la machine à partir de laquelle vous vous connectez et le port 6000 correspond au display :0 de cette machine qui est aussi le serveur X. Voici ce que ça donne

ssh -R 6005:localhost:6000 user@serveurdistant
password :
netstat -aln |grep -e 6005 -e x11
export DISPLAY=localhost:6005.0
xclock

Remarque
6005 correspond au display 5. Vous pouvez donc également écrire ce qui suit :

export DISPLAY=localhost:5.0

Etape 3 : rebondir

vous pouvez de la même façon rebondir de la machine sur laquelle vous êtes connecté avec un tunnel vers une 3ème machine. Pour cela vous allez créer un second tunnel qui redirige les accès X de la 3ème machine vers l’entrée du tunnel située sur la 2nde machine:

ssh -R 6005:localhost:6005 user@serveurdistant2
password :
netstat -aln |grep -e 6005 -e x11
export DISPLAY=localhost:5.0
xclock

Dans cet exemple le premier port après l’option -R spécifie le port d’écoute sur serveurdistant2 alors que localhost:6005 spécifient la fin du tunnel vue de la seconde machine, c’est à dire serveurdistant. Ce deuxième tunnel vous renvoie donc à l’entrée du premier tunnel et les accès du DISPLAY :5.0 de la 3eme machine s’affichent à travers le tunnel sur votre poste de travail…

Etape 4 : Plus loin

Vous pouvez ainsi passer tous les réseaux que vous voulez à condition d’avoir des serveurs pour rebondir. Malheureusement, ce n’est pas toujours possible d’utiliser le port 6005 soit parce qu’il est utilisé soit parce que le firewall de la machine le laisse pas passer. Changez ! 5900 à 5003 sont souvent de bon candidats s’ils ne sont pas utilisés par VNC Server.

Pour terminer si vous avez un problème et que vous voulez plus de détails, l’option -vvv de ssh vous permettra sans doute d’en savoir plus…