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

我有主机A,B和C.从主机AI只能通过ssh访问B.从BI可以访问C.我希望能够在C上运行X11程序并向前显示给A.

我试过这个:

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

但它不起作用。

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

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

A$ ssh -L [localPort]:C:22 B 

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

 A$ ssh -X -p [localPort] localhost 

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

 C$ xclock 

[localPort]可以是任何你不在A上收听的端口,为了简单,我经常使用2222。

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

 A$ ssh -NL 2022:C:22 B & A$ ssh -X -p 2022 localhost C$ xclock 

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

假设问题是中间机器没有X,但是它configuration为允许转发X11,只需安装xauth。

 B$ sudo yum install xauth 

如果您正在使用的任何sshd中禁用了X11Forwarding,则无法转发X11显示。

man sshd_config:

 X11Forwarding Specifies whether X11 forwarding is permitted. The argument must be “yes” or “no”. The default is “no”. 

您必须确保X11Forwarding在目的地您正在使用的所有中间sshds上启用。

只是一个小提示:你应该尝试使用VNC,X11显示转发带宽消耗相当大。

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

您需要在主机C的/etc/ssh/sshd_config上执行此操作,并重新启动sshd以使其工作:

 X11Forwarding yes X11UseLocalhost no 

你尝试过吗?

 A$ ssh -YB B$ ssh -YC C$ xlclock 

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

如果您经常从A到C,则可以将Bconfiguration为代理:

A:~/.ssh/config

 Host C ForwardX11 yes ProxyCommand ssh -W %h:%p B 

那么它只是:

 A$ ssh C xclock