SSH 终端是怎样做成的:从终端模拟器原理到自动更新签名(8 篇)
八篇都围着同一个跨平台 SSH 客户端:线上字节、界面按键、签过名的发版。单篇可以拆开读。代码摘自 MistTerm v1.2.26(Rust,客户端 AGPL),不是下载页上现在的版本。English version
- 终端模拟器原理:从字节流到屏幕上的字符
半截 ESC[ 不能丢:VT 状态机、网格语义,以及 egui 里中文宽字符怎么画对。 - SSH 通道流控详解:为什么 SSH 客户端必须边写边读
只写不读会和远端互相卡死。窗口耗尽之后还得继续读,网络 I/O 不能进 GUI 线程。 - 终端粘贴原理:bracketed paste、4095 字节行限制与 UTF-8 分片
粘贴标记得滤掉。Linux 行模式卡在 4095 字节,分片不能切在 UTF-8 中间。readline 8.1 默认开了 bracketed paste。 - SSH 中文乱码的根源:locale、SendEnv 与 env 请求
输出正常,输入就乱,退格删半个字。OpenSSH 实际转发哪些变量,以及怎样带上一个真正的 UTF-8 LANG。 - rz/sz 与 ZMODEM 协议原理:SSH 终端如何在字节流里识别文件传输
帧头长什么样、什么时候才算用户真的提交了 sz/rz、远端文件名为什么不能信。 - SSH 命令审计怎么做:终端能看到什么,哪些只能由服务端强制
客户端只能提示。强制得放在 sshd ForceCommand;带内标记可以被伪造。 - 安全的自动更新怎么做:minisign 签名、先验签后解析与防回滚
清单先验签,再解析。下载站再 HTTPS 也不算信任根;签过名的旧清单也不能重放。 - Rust 跨平台构建与发布:macOS universal、vendored OpenSSL、musl 静态编译与签名审批
lipo 合并 macOS universal、从二进制里量 glibc、musl 静态 CLI,以及签名任务不能让构建机看见私钥。