问题

问题

问题

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

A-->B-->C

到目前为止,简单的 ssh 可以按预期工作,但是我无法运行 X11 转发。

我发现了一些类似的问题,但我认为它们都假设 X11 在 B 上运行。解决方案如下如何通过附加服务器启用 SSH X11 转发?似乎不适用于我的设置。

是不是需要在 B 上运行一个 X-server,以便将 X11 从 C 转发到 B,再从 B 转发到 A?

设置

我已经根据本文在 A 上设置了我的 ~./ssh/ssh_config:http://sshmenu.sourceforge.net/articles/transparent-mulithop.html

当我尝试使用以下方法从 C 连接并转发 X11 时

$A: ssh -X C

我通过 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-desktop pc,运行 X-server/gnome

结论

我不确定问题是否因为我的配置/设置而存在,或者这通常不会出现...如果有类似问题/经验的人可以帮助我,我将不胜感激!

答案1

我不相信 X11 转发会在所描述的多跳场景中起作用。

但是,如果您首先建立一个 ssh 连接 A->B,并将端口转发到 C:22,然后通过已建立的“直接”连接使用 X11 转发连接到 C,那么应该可以正常工作。

类似下面的内容:

A $ ssh -L2200:C:22 -N B(可能将其置于背景中)

其次是:

A $ ssh -X -p2200 localhost

答案2

如果您正在使用 ProxyCommand,那么不要对 ProxyCommand 使用 -X。ProxyCommand 应该禁用所有高级功能,您只需要 ProxyCommand 的最低限度功能。

当使用 ProxyCommand 从 A 到 B 进行 ssh 连接并使用 nc 连接到 C 上的端口 22 时,A 上的 ssh 客户端将与 C 上的 ssh 服务器进行通信。这意味着 B 上发生的任何事情都不会影响您在 A 和 C 之间可以使用的功能。B 也不可能产生任何影响,因为通信在通过 B 时是加密的。

X11 转发对您不起作用的解释必须在 A 或 C 上找到。您在 A 上键入的命令在我看来是正确的,所以剩下两个解释,我能想到:

  1. 您在输入 ssh 命令的 shell 中没有 DISPLAY 变量。
  2. C 上的 ssh 服务器配置为不允许 X11 转发。您需要在 C 上的 sshd_config 中设置“X11Forwarding yes”,否则它将无法正常工作。

答案3

在具有 X11 转发的多跳设置行中,您需要在每台机器上安装 xauth。这是您在机器 B 上需要的唯一 X11 应用程序。机器 A 是唯一需要 X 服务器的机器。机器 C 当然需要您的 X11 应用程序,但不需要 X 服务器。理论上,您甚至可以在机器 A 上没有 X11 应用程序的情况下执行此操作。

相关内容