如何通过附加服务器启用 SSH X11 转发?

lex*_*sys 41 linux ssh x11

我有主机 A、B 和 C。从主机 AI 只能通过 ssh 访问 B。从 BI 可以访问 C。我希望能够在 C 上运行 X11 程序并将显示转发到 A。

我试过这个:

A$ ssh -XB
B$ ssh -XC
C$ xclock
错误:无法打开显示:

但它不起作用。

小智 31

有几种方法可以做到这一点,我更喜欢的是转发 ssh 端口:

首先,连接到机器 B 并通过 B 将 [localPort] 转发到 C:22

A$ ssh -L [localPort]:C:22 B
Run Code Online (Sandbox Code Playgroud)

接下来,使用 [localPort] 通过这个新创建的隧道从 A 连接到 C,转发 X11

A$ ssh -X -p [localPort] localhost
Run Code Online (Sandbox Code Playgroud)

现在我们可以在 C 上运行 X11 程序并让它们显示在 A 上

C$ xclock
Run Code Online (Sandbox Code Playgroud)

[localPort] 可以是您在 A 上尚未侦听的任何端口,为了简单起见,我经常使用 2222。

  • 不完全是...如果服务器 C 上没有启用 X11Forwarding,它将无法工作。它也不会工作,除非在服务器 B 上设置 AllowTcpForwarding yes 和 GatewayPorts yes。这个答案根本不可接受 (3认同)

小智 7

这可以使用端口转发轻松完成:

A$ ssh -NL 2022:C:22 B &
A$ ssh -X -p 2022 localhost
C$ xclock
Run Code Online (Sandbox Code Playgroud)

端口 localhost:2022 被转发到 C:22 通过 B SSH 到 C 通过 localhost:2022 正常使用 X

  • 如果 B(网关)没有启用正确的 sshd 转发选项,这将与其他地方所述的相同原因不起作用。 (2认同)

小智 6

你有没有试过

A$ ssh -Y B
B$ ssh -Y C
C$ xlclock
Run Code Online (Sandbox Code Playgroud)

-Y 标志“启用受信任的 X11 转发”。

  • 这对我有用,但只是发现 X11 有多慢 (2认同)

小智 5

对于较新版本的 opensshd,您必须禁用X11UseLocalhost它才能工作。

您需要在主机 C 上执行此操作/etc/ssh/sshd_config并重新启动 sshd 才能正常工作:

X11Forwarding yes
X11UseLocalhost no
Run Code Online (Sandbox Code Playgroud)