Transférer X11 sur SSH si la configuration du serveur ne le permet pas

10

Considérez une situation où je me connecte via SSH de la machine A à la machine B, j'ai une session X sur la machine A et je veux exécuter un programme X sur B.

ssh -X Brend ce travail transparent. Mais que faire si la configuration du serveur manque X11Forwarding yes, je n'ai pas d'autorisations root sur le serveur et l'administrateur du serveur est indifférent?

Il est évidemment possible de transmettre la connexion X11, car je peux transférer ce que je veux sur le canal SSH. En fait, si le serveur X local autorise les connexions TCP, c'est aussi simple que ssh -R 6010:localhost:6000(d'être ajusté pour les numéros d'affichage). Qu'en est-il du cas commun où le serveur X local autorise uniquement les connexions de socket? Comment faire le transfert X de manière pratique et sécurisée, avec un minimum d'exigences d'installation (en particulier sur B)?

Gilles 'SO- arrête d'être méchant'
la source

Réponses:

2

La réponse de @Demi est bonne mais je pense que la remplir serait d'une grande aide.

  • local - la machine locale desservant un Xserver.
  • remote - la machine distante desservant l'application qui conduit les données vers le Xserver

À distance /etc/ssh/sshd_config:

X11Forwarding no
X11DisplayOffset 10
X11UseLocalhost yes

La télécommande ~/.Xauthorityest vide ou n'existe pas

Sur local:

Xephyr -ac -screen 1280x800 -br -reset   :2 &
DISPLAY=:2 ssh  -fR 6010:/tmp/.X11-unix/X2  user@remote "DISPLAY=:10 xeyes"

Dans le test, local exécutait Ubuntu 18.05, distant exécutait Debian Jesse.

Craig Hicks
la source
5

Le protocole X11 parle-t-il lorsque vous parlez à un port tcp est-il différent lorsque vous parlez à un socket?

Peut-être pourriez-vous combiner votre propre utilisation suggérée ssh -R 6010:localhost:6000pour apporter les données X11 dans la redirection de port, puis ponter le gab local entre le port tcp et l'écouteur de socket X11 avec nc comme:

nc -l -p 6000 > /tmp/.X11-unix/X0
Caleb
la source
Oui, c'est l'idée. Mais j'espérais une réponse disant "mettez ceci dans votre .ssh/configcôté client et cela dans votre .profilecôté serveur, puis exécutez simplement ssh B".
Gilles 'SO- arrête d'être méchant'
1
Il y a une réponse simple "mettez ceci dans votre configuration", le problème est que vous excluez cela dans vos qualifications de question parce que l'option dont vous avez besoin va dans le côté sshd_config des choses sur B. Vous essayez de contourner un bloc mis en endroit pour qu'il soit difficile d'ouvrir par inadvertance un problème de sécurité.
Caleb
3
Je cible le cas (selon mon expérience très commun) où l'administrateur ne s'en soucie pas et vient de laisser les paramètres par défaut en place. Le transfert X11 n'est pas interdit par la politique, c'est juste un inconvénient par l'indifférence du sysadmin. Quoi qu'il en soit, le transfert X11 permet au serveur d'attaquer le client, donc l'interdire côté serveur n'a pas beaucoup de sens.
Gilles 'SO- arrête d'être méchant'
@ Gilles J'accepte que la valeur par défaut ne protège pas vraiment contre quoi que ce soit d'utile. Faut-il donc faire pression pour que la valeur par défaut soit modifiée en amont?
Caleb
Pour moi, /tmp/.X11-unix/X0c'est un socket de domaine Unix, pas un FIFO, donc toute tentative de redirection se termine par ENXIO: No such device.
Samveen
2
  1. Faites tourner un serveur X supplémentaire en utilisant Xephyr. C'est pour la sécurité - cela empêche le système distant de compromettre le vôtre.

  2. Utilisez SSH pour transférer un socket distant vers le socket Xephyr. SSH prend également en charge le transfert des sockets Unix.

  3. Définissez correctement les variables d'environnement sur le serveur distant.

Demi
la source