小米ax3000t 解锁ssh后用scp上传文件,超过20k就会显示错误
小米AX3000T 官方固件写入限制 20 KB”的问题,症状就是用 scp 传文件只要超过 20 KB 就会报错,目前基本可以确定是官方固件里
/usr/sbin/dropbear 或 /usr/bin/dbclient 被小米加了一道硬编码限制,用来阻止大家一次性把大型第三方包(如 ShellClash、OpenClash 等)拖进路由器。简单理解就是:-
SSH 能连,但 scp 内部会调用 dropbear 的 dbclient 做加密通道,小米把 dbclient 单次接收缓冲区写死成 20 KB;
-
本地 scp 默认一次会发 32 KB~64 KB 的 payload,于是刚发第一帧就被对端 dropbear 拒绝,client 端立刻报 “lost connection” 或 “broken pipe”;
-
文件 ≤ 20 KB 时,一帧就能装下,不会触发这条保护,所以看上去“小文件正常”。
目前可行的绕过办法只有两条思路,没有“单纯改命令参数”就能突破的方案:
A. 在 PC 端把大文件切成 ≤ 20 KB 的小块
-
Linux / macOS
split -b 19k bigfile.bin chunk_ # 每块 19 KB for f in chunk_*; do scp "$f" root@192.168.31.1:/tmp/ done ssh root@192.168.31.1 'cat /tmp/chunk_* > /tmp/bigfile.bin; rm /tmp/chunk_*' -
Windows(PowerShell)
1..20 | % { $s=19kb; $i=$_; $b=[io.file]::ReadAllBytes("bigfile.bin") [io.file]::WriteAllBytes("chunk_$i",$b[($i-1)*$s..($i*$s-1)]) }
切完用 WinSCP 一个个拖进去,再到路由器里
cat 合并即可。假设已经在
/tmp 里放了 chunk_aa chunk_ab chunk_ac …:cd /tmp
cat chunk_* > 目标文件名.bin
B. 直接换掉被限制的 dropbear
先把路由器刷成“官改”或第三方固件(例如 OpenWrt、Padavan、X-Wrt),这些固件用的都是原版 dropbear/openssh,没有 20 KB 限制,一次 scp 几百兆都没问题。但刷机有风险,防止意外砖。
先把路由器刷成“官改”或第三方固件(例如 OpenWrt、Padavan、X-Wrt),这些固件用的都是原版 dropbear/openssh,没有 20 KB 限制,一次 scp 几百兆都没问题。但刷机有风险,防止意外砖。
临时应急就用方案 A,想根治只能走方案 B。官方后续是否解除这条限制暂无消息,目前 1.0.80/1.0.84 等新版固件实测依旧存在 20 KB 天花板 。
展开全文


发表评论