一个克制的、理性的关注互联网科技和人文的频道,也谈谈美食和电影,发现和分享一切有趣有价值的内容。
为什么每按一次键SSH就发送 100 个数据包

在作者开发的一款基于SSH的高性能终端游戏(使用 Bubble Tea + Wish 构建)中,即使没有实际游戏画面更新(仅返回“屏幕太小”提示),服务器仍产生大量网络流量和 CPU 开销,单次按键触发约 270 个 TCP 数据包,其中 179 个是 36 字节的“神秘消息”。

通过ssh -vvv定位到,原因是OpenSSH 自 2023 年起引入的Keystroke Timing Obfuscation特性,此功能旨在防止攻击者通过分析用户打字节奏推断输入内容(如密码、敏感命令)。在真实按键前后,客户端主动发送大量 “chaff”(诱饵)数据包,这些包内容为空或填充,但格式合法,模拟真实交互默认持续约 2 秒,每 20ms 一次,总计可发送 ~100 个包。

该功能针对人类用户手动操作的安全加固,但对于机器对机器(bot server)的高频率、低延迟通信是完全没必要的。这个功能完全由客户端决定是否启用,但是客户端(9.6 或更高版本)只有在服务端声明支持 "ping@openssh.com" 扩展时,才会启用混淆。而 OpenSSH 服务端(sshd)默认会广告这个扩展,因此,虽然服务端“不主动开启混淆”,但它的默认行为间接使客户端启用了混淆。

#编程

https://eieio.games/blog/ssh-sends-100-packets-per-keystroke/
#编程

今天处理某定制版linux遇到的一个问题,明明文件有755权限,切换到普通用户就是无法运行,报permission deny,经排查,是因为没有上级目录权限所以即使有当前脚本执行权限也会报错。再次排查,是因为默认的umask从0022改成了0027,修改/etc/profile和/etc/bashrc后依然无效,创建出来的文件和目录依然没有权限。

一顿敲敲敲,发现是/etc/login.defs配置文件里的umask也被改了,这个文件会影响用户和进程的umask,自然就影响到创建出来的文件权限。

查看进程umask可以用如下命令

grep Umask /proc/$pid/status

默认值应该是0022才正确。

 
 
Back to Top