在服务器上无需 SSH 即可反向 X11 转发

在服务器上无需 SSH 即可反向 X11 转发

我想在服务器上运行 X11 程序并在客户端上显示窗口。

我在服务器上有一个 shell 来启动。 (这不是一个 SSH shell,而是一些集群计算软件)程序必须以某种方式从这个 shell 启动。

我可以通过 SSH 访问并直接访问客户端,但是我无法从客户端通过 SSH 访问服务器。

我想在服务器上运行程序并在客户端上打开窗口。我该怎么做?

答案1

反向隧道法

您可以通过 SSH 从 A 到 B,但您想通过 SSH 从 B 到 A?一个通用的解决方案是创建反向 SSH 隧道。从服务器:

ssh -f -N -R 4222:localhost:22 CLIENT

现在您可以通过 SSH 连接到 CLIENT 上的端口 4222 并登录到服务器。在该连接上打开 X11 转发。

ssh -p 4222 -X localhost

手动设置方法

或者,您可以手动设置 X11 转发到所需的显示器。如果要将:20CLIENT 上的显示转发到:0SERVER 上的显示:

ssh -L 6020:localhost:6000 CLIENT

如果应用程序显示正确,则只能使用 X 显示授权。这采用“cookie”(随机生成的值,用作密码)的形式。您需要检索 cookie 值并运行命令xauth add :20 MIT-MAGIC-COOKIE-1 …。请参阅在远程 X 显示器上打开窗口(为什么“无法打开显示器”)?。对于您的情况,您可以通过xauth list在 X 会话中运行命令来获取 SERVER 上的 cookie 值。

建立 TCP 转发并设置 cookie 值后,设置export DISPLAY=:20并运行您的应用程序。

答案2

假设您在服务器上有 ssh(也就是说,您可以通过 ssh 离开服务器,但不能连接到服务器),您可以从服务器端口转发到客户端。

SERVER$ ssh -L6000:127.0.0.1:6000 CLIENT.ip.or.name

6000这将通过 ssh 隧道将服务器上的本地端口转发到 localhost 端口6000

相关内容