终端如何识别密码输入,旧判断为何失效
文章分析终端利用termios状态识别密码输入的机制,以及sudo自2025年底调整密码读取方式后对相关判断的影响。终端仍会接触输入字符,录制、补全和Agent功能需要审视敏感信息过滤逻辑。
原文暂未完整获取,基于公开信息的快读
终端里输入密码时,屏幕不显示字符,不代表终端程序接触不到密码。dev.to 的这篇文章分析了终端通过两个 termios 标志识别密码输入的机制,并指出 sudo 自 2025 年底调整密码读取方式后,旧判断会失效。不过,现有节选尚未展开 sudo 的具体改动,能确认的重点是这套识别逻辑的边界。
目前能确认什么
在 macOS 和 Linux 上,termios 管理终端输入行为。其中,ECHO 控制输入字符是否回显,ICANON 控制是否按行提供输入。
常见密码读取程序会关闭 ECHO、保留 ICANON。但只看 ECHO 不够:bash 使用的 Readline 也会关闭回显,同时关闭 ICANON,再自行绘制字符。因此,节选中的 WezTerm 和 Ghostty 会组合检查「关闭回显、开启规范模式」,据此显示密码锁标识。
这两个标志提供的是启发式线索,不能证明输入一定是不是密码。
SSH 还会让本地终端进入 raw mode;远端 sudo 修改的是远端伪终端状态,本地终端无法直接读取。作者提供了观察标志变化的 Python 脚本,但明确表示自己没有运行,示例结果属于文档和源码推导。
我的判断
对终端和编程 Agent 开发者,首先要检查:敏感输入过滤是否完全依赖这两个标志。如果规则未命中就允许记录原始按键,识别失效便可能让密码进入后续处理链路。
也要区分数据入口。原始键盘输入、终端输出和滚屏内容并不相同,不能因为终端接触过密码,就认定只读取滚屏的 Agent 也能看到密码。
sudo 究竟改了哪些读取行为、影响哪些版本,以及相关终端是否已有适配,现有材料没有说清。目前足以质疑旧规则的可靠性,还不足以认定某款产品已经泄露密码。