ssh - 如何通过浏览器实现 SSH X11 转发
问题描述
我计划实现 SSH -X 提供的功能。这用于远程打开基于 GUI 的应用程序。所以我想了解涉及哪些组件并且应该实施。我知道如何设置这个,比如在主机中启动 VNC 服务器并分配 DISPLAY 变量。并从远程客户端进行 SSH -X 连接并执行所需的 GUI 应用程序外壳脚本(例如 xeyes、xclock 等)。如果有人有更高级的信息,请分享。我的要求是设计一个基于 Web 的“SSH X”客户端。市场上有很多用于 Web SSH 的工具,但没有支持 SSH X11 转发的工具。
解决方案
X11 协议本质上是网络透明的,因此ssh -X
只需在远程系统上设置一个端口并设置DISPLAY
变量,以便 X 程序将 X11 协议写入该端口,然后将其流回本地端。(这是一种简化;还涉及到身份验证。)
如果您想在浏览器中执行此操作,您首先必须有某种服务器端组件来执行 SSH 操作并将数据流转换为浏览器可以使用的东西。浏览器不允许在 JavaScript 中打开任意 TCP 端口到远程系统,因为这样做会带来巨大的安全风险。
您还必须找到某种方法在浏览器中呈现 X11 协议。本质上,您将实现一个基于 Web 的 X 服务器(希望在 WebAssembly 之类的东西中)。您应该阅读现有的规范并查看流行的开源 X11 实现,例如 Xorg。
我应该指出,由于需要实现完整的 X 服务器,这是一项巨大的工作。基于 VNC 的协议要简单得多,因为它们不需要实现绘图图元,只需在屏幕上渲染(可能是压缩的)图像流。
推荐阅读
- javascript - 嵌套标签时查找元素包含文本
- java - Socket IO事件多次触发NodeJS
- google-data-studio - 找不到组件 ID:gs://
- c# - 如何从 UTC 偏移量获取 DateTime
- regex - 重型 3GB csv 数据库的 sed/awk 处理问题
- .htaccess - .htaccess 将带有查询参数的特定不存在文件重定向到新的 url
- swift - 如何
在 SwiftSoup 中使用换行符更改标签? - c# - Asp.Net Core - Web 服务的可配置属性路由
- php - 致命错误:未捕获的错误:调用未定义的函数 mysqli 你能帮帮我吗
- sql - Oracle SQL - 使用选择生成聚合行