为 SSH 打造原生图形界面外壳
文章摘要
作者 Marcus Lewis 提出了一个设想:为远程服务器和边缘设备提供一个基于浏览器的图形化”外壳”(graphical shell),让它们可以从其他设备上以图形方式操作,而不必局限于传统终端。他指出,像 Jupyter、Tensorboard 这类跑在远程服务器上的 Web 应用各自为政、各有一套安全约定,缺少一个统一的框架来安全地把图形界面交付到远程机器上。经典做法是手动敲 ssh -L 24601:localhost:8889 ... 这样的端口转发命令,繁琐且不直观。
技术上,他的方案把每个应用都做成一个监听 Unix 域套接字(而非 localhost 端口)的 HTTP 服务器,借此获得更好的安全与权限管理;加密交给 SSH 隧道来做,而不是让每个应用各自实现;再加一层 API,让应用可以被发现并注册为特定服务(如文本编辑器)。系统同时支持传统 HTML Web 应用和名为 “outerframe” 的原生应用——一种”多平台”(而非”跨平台”)的思路,用跨平台协议对接各平台专属的前端代码。
作者为此发布了两个配套项目:Outer Loop(一个内置 SSH 的浏览器)和开源的 Outer Shell(图形外壳)。他认为把浏览器与 SSH 客户端合二为一,能带来”只需指向一台服务器即可”的流畅体验,无需 sudo、也不用向网络暴露新端口。所有代码都是预编译分发的,用户不必等待编译;后端采用依赖精简、静态链接的方式以便通过 SSH 轻量部署。
HN 评论精华
这篇帖子引发了激烈争论,评论区大致分成”这是重新发明轮子”和”方向有趣值得探索”两派。
-
术语之争:supertroop 认为图形界面”背离了 shell 的本意,shell 就是用于 CLI 交互的”,而 hnlmorg 反驳说 shell 泛指任何用户界面(Windows 的 explorer.exe 就是 shell),SSH 也不只是跑 CLI,还支持 SFTP、端口转发乃至 X11 图形转发。mrcslws(即作者)坦言早料到会有争议,特意用”graphical shell”来消歧,并引用微软内部长期把”shell”用于指代图形界面的历史。
-
“这不是早就有了吗”:多位老手列举了大量前辈方案——guhcampos 直言 Cockpit 十多年前就实现了套接字连接、前后端分离和服务器控制台,”它不奇怪,因为它早就存在了”;还有人点名 X11 转发(
ssh -X)、webmin、MobaXterm、Windows Admin Center、NoMachine/X2Go、xpipe.io 等。hatradiowigwam 搬出名言”不懂 Unix 的人注定要拙劣地重新发明它”。 -
作者的回应:面对 Cockpit 的质疑,mrcslws 承认没在贬低它,但强调 Outer Loop 解决了更多”栈”上的问题——Cockpit 受限于现有浏览器,必须暴露端口或做端口转发,而他专门造了一个浏览器来突破这些限制;他还表示 Cockpit 反而能很好地跑在 Outer Loop 里。
-
安全担忧:calmbonsai、wang_li 等强烈反对让浏览器获得通用套接字权限,认为这是巨大的安全隐患(ActiveX、Flash 的前车之鉴)。作者回应说套接字默认被阻止、需服务端显式加入白名单,并有 sudo 感知机制防止未授权访问 root 套接字。
-
支持声音:goranmoomin 对满屏”TUI 至上”的傲慢感到恼火,主张”TUI 并不天然优于 GUI”、”SSH 作为传输层理应支持图形显示层”;achille、tammer、dwb 等则赞赏这种从第一性原理重新思考人机交互的尝试。dharmatech 打趣道:”当一个项目公告能惹恼这么多人时,往往说明你走在一条正确、或至少有趣的路上。”