# 《WaLiSSH - AI Shell 智能终端》第1-7节:SSH命令处理
作者:小傅哥
博客:https://bugstack.cn (opens new window)
视频:https://t.zsxq.com/TxVuy (opens new window)
沉淀、分享、成长,让自己和他人都能有所收获!😄
大家好,我是技术UP主小傅哥。
上一节我们完成了前端和后端 SSH 连接 API 的对接,可以在界面上完成创建、编辑、删除、连接、断开 SSH 服务器等操作。但连接上服务器之后呢?终端面板还只是一个空壳,没办法输入命令、看不到输出。
今天这节,我们就把终端面板"盘活"——让用户可以在 WaLiSSH 里像使用本地终端一样,远程操作云服务器。
# 一、本章诉求
实现 SSH 终端的核心交互能力:打开终端会话、输入命令、读取输出、调整窗口大小、断连检测与重连。涉及后端终端会话管理(Domain + Infrastructure)和前端 xterm.js 集成(TerminalPanel 改造)。
你可以把这个过程就是当成你自己在承接一次产品需求——用户说"我要在 Web 终端里敲命令",你需要设计从后端 Shell 通道到前端渲染的完整链路。
# 二、流程设计
如图,从前端 xterm.js 到后端 JSch Shell 通道的完整数据流;

- 整个数据流分两条路径:输入路径和输出路径。
- 输入路径:用户在 xterm.js 里敲键盘 →
onData事件拿到输入字符 → 写入缓冲(10ms 批量合并)→ 调用POST /terminal/write发到后端 → 后端写入 JSch Shell 的OutputStream→ 远程 Shell 收到字符并执行。 - 输出路径:远程 Shell 产生输出 → 后台读取线程持续从 JSch
InputStream读取 → 写入StringBuilder缓冲区 → 前端每 50ms 调用GET /terminal/read轮询 → 拿到输出后terminal.write()渲染到 xterm.js。 - 👩🏻🏫敲黑板:这里没有用 WebSocket,而是用 HTTP 轮询。为什么?因为 WaLiSSH 是 Tauri 桌面应用,前后端都在本地,网络延迟极低,50ms 的轮询间隔对终端操作来说完全够用,实现也更简单。

