it-swarm.cn

如何通过其他服务器启用SSH X11转发?

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

我尝试了这个:

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

但这是行不通的。

34
lexsys

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

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

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

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

A$ ssh -X -p [localPort] localhost

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

C$ xclock

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

26
dave

使用端口转发可以轻松实现:

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

端口localhost:2022通过B转发到C:22 SSH通过localhost:2022到C

7
AgentK

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

在基于yum的系统(Fedora,redhat,centos)上:

B$ Sudo yum install xauth

在基于apt的系统上(debian,ubuntu):

B$ Sudo apt-get install xauth
4
Jayen

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

您需要在主机C的/etc/ssh/sshd_config并重新启动sshd使其起作用:

X11Forwarding yes
X11UseLocalhost no
3
Brad Allison

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

人sshd_config:

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

您必须确保在目标and所使用的所有中间sshds上启用了X11Forwarding。

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

2
asdmin

如果您经常从A转到C,则可以将B配置为代理:

A:~/.ssh/config

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

那就是

A$ ssh C xclock
2
Jayen

你试过了吗

A$ ssh -Y B
B$ ssh -Y C
C$ xlclock

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

1
pyhimys