
如何用wterm打造Web SSH客户端WebSocket-SSH桥接实战教程【免费下载链接】wtermA terminal emulator for the web项目地址: https://gitcode.com/gh_mirrors/wterm1/wtermwterm 是一款面向 Web 的高性能终端模拟器核心用 Zig 编译为约 26 KB 的 WASM并原生内置 WebSocket 传输。本文将带你用 wterm 打造一个浏览器里的 Web SSH 客户端——无需任何桌面软件一条 WebSocket-SSH 桥接链路即可让浏览器直接登录远程服务器。 方案架构三段式 WebSocket-SSH 桥接传统 SSH 只能跑在本地终端里而 wterm 让终端住进浏览器。整个 Web SSH 客户端由三层组成层级技术职责浏览器端wterm/react终端组件渲染 xterm-256color 终端、采集键盘输入桥接层Node.js ws ssh2WebSocket 消息与 SSH Shell 流互相同步转发远程端标准 SSH 服务器提供真实的登录 Shell数据流向非常直白用户在浏览器表单填写主机、端口、用户名与凭据浏览器把连接参数作为第一条 WebSocket 消息发给/api/ssh服务端据此建立 SSH 连接并打开 Shell 流之后两个方向的数据终端输出 / 键盘输入经 WebSocket 双向透传完整示例说明见 examples/ssh/README.md。 快速上手5 分钟跑通 SSH 示例一键克隆与安装git clone https://gitcode.com/gh_mirrors/wterm1/wterm cd wterm pnpm install zig build 提示zig build用于从 Zig 源码生成 WASM 二进制。若只运行前端示例npm 包中已内置编译好的 WASM可跳过此步。启动开发服务器pnpm --filter ssh dev启动后浏览器打开ssh-example.wterm.localhost你会先看到一个连接表单主机 / 端口 / 用户名 / 密码或私钥。点击Connect一个完整的远程 Shell 就出现在页面上——可以直接运行ls、vim等任意命令。 桥接核心服务端如何把 WebSocket 接到 SSH桥接逻辑全部集中在 server.ts它只做了三件事1. WebSocket 升级路由Next.js 启动时监听upgrade事件路径为/api/ssh的请求交给WebSocketServer处理其余升级请求如 HMR仍由 Next.js 接管见 server.ts。2. 首条消息即连接参数第一条消息是一段 JSON包含host、port、username以及password或privateKey之一见 server.ts。3. Shell 流与 WebSocket 双向管道SSH 连接ready后服务端用xterm-256color打开一个 80×24 的 Shellstream的data事件直接转发给 WebSocket浏览器发来的每条消息则写入stream任一方向关闭时另一端随之清理见 server.ts。这种双向管道写法没有任何自定义协议换成其他流式后端时思路完全通用。 前端连接表单与终端回显前端实现位于 app/page.tsx连接表单Host / Port / Username / 认证方式密码或私钥用户名会存入localStorage方便下次登录终端接入Terminal通过onData回调把用户输入ws.send()出去收到的二进制帧解码后交给write()回显见 app/page.tsx连接状态机disconnected → connecting → connected / error四态驱动界面切换React 之外wterm 还提供 Vue 与 Svelte 组件以及零依赖的WTerm原生 JS 写法快速入门可参考 Get Started 文档。⚙️ 进阶用 WebSocketTransport 实现自动重连示例为了简洁直接手写了WebSocket而wterm/core内置了生产级传输层 WebSocketTransport开箱即得三项能力能力说明二进制帧binaryType arraybuffer减少字符串编解码开销指数退避重连断线后 1s 起步、逐步翻倍、上限 30s见 transport.ts离线缓冲未连接时send()的消息自动排队重连成功后按序冲刷替换只需几行import { WebSocketTransport } from wterm/core; const transport new WebSocketTransport({ url: wss://your-host/api/ssh }); transport.onData (data) term.write(data); transport.connect();另外请保持终端的autoResize开启窗口缩放时 wterm 会应用新的行列尺寸并触发onResize桥接端据此同步远端 PTY输出才不会错位换行原理见 configuration.mdx。️ Web SSH 客户端常见问题排查症状原因与解法WebSocket 连不上https://页面必须使用wss://否则被浏览器 Mixed Content 拦截连接后立即断开检查防火墙是否放行 22 端口并查看服务端回传的SSH error红字提示中文 / emoji 错位确认使用新版 wterm内置核心原生支持 CJK 与 emoji 宽字符对齐粘贴多行文本异常wterm 已支持括号粘贴bracketed paste请确认桥接端原样透传字节✅ 总结三步拥有你的在线 SSH 入口用 wterm 搭建 Web SSH 客户端的核心只有两步浏览器里放一个终端服务端把 WebSocket 接到 SSH Shell 流。得益于 wterm 的 ZigWASM 内核与 DOM 渲染浏览器终端不仅快还天然支持文本选中、复制粘贴、屏幕阅读器与 OSC 8 超链接。按 examples/ssh/ 示例起步几分钟内你就能拥有自己的在线 SSH 终端。【免费下载链接】wtermA terminal emulator for the web项目地址: https://gitcode.com/gh_mirrors/wterm1/wterm创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考