我有主机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