首页 > 解决方案 > 如何通过浏览器实现 SSH X11 转发

问题描述

我计划实现 SSH -X 提供的功能。这用于远程打开基于 GUI 的应用程序。所以我想了解涉及哪些组件并且应该实施。我知道如何设置这个,比如在主机中启动 VNC 服务器并分配 DISPLAY 变量。并从远程客户端进行 SSH -X 连接并执行所需的 GUI 应用程序外壳脚本(例如 xeyes、xclock 等)。如果有人有更高级的信息,请分享。我的要求是设计一个基于 Web 的“SSH X”客户端。市场上有很多用于 Web SSH 的工具,但没有支持 SSH X11 转发的工具。

标签: sshx11vncxvfbx11-forwarding

解决方案


X11 协议本质上是网络透明的,因此ssh -X只需在远程系统上设置一个端口并设置DISPLAY变量,以便 X 程序将 X11 协议写入该端口,然后将其流回本地端。(这是一种简化;还涉及到身份验证。)

如果您想在浏览器中执行此操作,您首先必须有某种服务器端组件来执行 SSH 操作并将数据流转换为浏览器可以使用的东西。浏览器不允许在 JavaScript 中打开任意 TCP 端口到远程系统,因为这样做会带来巨大的安全风险。

您还必须找到某种方法在浏览器中呈现 X11 协议。本质上,您将实现一个基于 Web 的 X 服务器(希望在 WebAssembly 之类的东西中)。您应该阅读现有的规范并查看流行的开源 X11 实现,例如 Xorg。

我应该指出,由于需要实现完整的 X 服务器,这是一项巨大的工作。基于 VNC 的协议要简单得多,因为它们不需要实现绘图图元,只需在屏幕上渲染(可能是压缩的)图像流。


推荐阅读