问题
我想从我的客户端 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 上键入的命令在我看来是正确的,所以剩下两个解释,我能想到:
- 您在输入 ssh 命令的 shell 中没有 DISPLAY 变量。
- C 上的 ssh 服务器配置为不允许 X11 转发。您需要在 C 上的 sshd_config 中设置“X11Forwarding yes”,否则它将无法正常工作。
答案3
在具有 X11 转发的多跳设置行中,您需要在每台机器上安装 xauth。这是您在机器 B 上需要的唯一 X11 应用程序。机器 A 是唯一需要 X 服务器的机器。机器 C 当然需要您的 X11 应用程序,但不需要 X 服务器。理论上,您甚至可以在机器 A 上没有 X11 应用程序的情况下执行此操作。