转发X11的一跳没有安装X服务器

问题

我想从客户端A在机器C上远程运行X应用程序。连接到这台机器的唯一方法是使用机器B(防火墙)作为一个跳点:

A→B→C

到目前为止,简单的ssh按预期工作,但我不能让X11转发运行。

我发现了一些类似的问题,但我认为他们都假设X11在B上运行。 如何通过附加服务器启用SSH X11转发等解决scheme? 似乎没有与我的设置工作。

难道你需要在B上运行X服务器来将X11从C转发到B,将B转发到A?

build立

根据这篇文章,我在A上设置了〜/ ssh / ssh_config: http : //sshmenu.sourceforge.net/articles/transparent-mulithop.html

当我尝试通过使用连接并从C转发X11

$A: ssh -XC 

我通过B连接到C,但没有X11转发(虽然在B和C上启用):

 $C: echo $DISPLAY $C: glxgears Error: couldn't open display (null) 

使用的机器

  • 答:运行X-server / gnome的Arch Linux 3.13.7-1-ARCH笔记本
  • B:Debian 6 Linux 2.6.32-5-amd64 pc没有安装/运行X-server
  • C:OpenSuse 13.1 3.11.10-7 – 运行X-server / gnome的桌面电脑

结论

我不确定是否因为我的configuration/设置而存在问题,或者这个问题一般不会出现。如果有类似问题或经验的人可以帮我解决问题,我将不胜感激!

我不相信X11转发将在描述的多跳场景中工作。

但是,如果您首先build立了一个ssh连接A-> B,并将端口转发到C:22,然后通过build立的“直接”连接与X11连接,连接到C,这应该工作得很好。

像下面这样:

A $ ssh -L2200:C:22 -NB (可能把它放到后台)

其次是:

A $ ssh -X -p2200 localhost

如果您使用的是ProxyCommand,则不要使用-X作为ProxyCommand。 ProxyCommand应该禁用所有高级function,您只需要ProxyCommand的最低限度。

当使用ProxyCommand从A到B连接到C上的端口22时,A上的ssh客户端将与C上的ssh服务器进行通信。这意味着B上没有任何事情会影响哪些function你可以在A和C之间使用。由于通信在通过B时被encryption,所以B不可能有任何影响。

为什么X11转发不能为你工作的解释必须在A或C上find。你在A上input的命令对我来说看起来是正确的,所以有两个解释我可以想到:

  1. 在shell中没有DISPLAYvariables,在其中键入了ssh命令。
  2. C上的ssh服务器被configuration为禁止X11转发。 你需要在C的sshd_config中使用“X11Forwarding yes”,否则不能工作。

在使用X11转发的多跳设置线中,每台机器上都需要xauth。 这是机器B上唯一需要的X11应用程序。机器A是唯一需要X服务器的机器。 机器C当然需要您的X11应用程序,但不需要X服务器。 从理论上说,你甚至可以在机器A上没有X11的应用程序。