update at 2026-03-15 14:54:51

This commit is contained in:
douboer@gmail.com
2026-03-15 14:54:51 +08:00
parent c02b23bad2
commit d375f7174f
26 changed files with 1284 additions and 15 deletions

View File

@@ -0,0 +1,412 @@
# Kindle Voyage 5.13.6 Dashboard/SSH 一次成操作手册
本文基于 2026-03-15 的一次实机排障整理,目标是让下次同型号 Kindle 在安装 dashboard、开启调试、打通 SSH 时尽量一次完成,不再重复今天这 5 个小时的试错过程。
## 适用范围
- Kindle Voyage
- 固件 5.13.6
- 已完成越狱
- 已安装 KUAL
- 通过 MRPI 安装扩展
- 目标项目为本仓库 `dash/`
## 最终结论
今天最终打通的稳定路径不是 USB 直连 SSH而是
1. Kindle 本机先通过 KTerm 拉起 `dropbear`
2.`dropbear` 监听 `*:22`
3. 从 Mac 通过 Kindle 的 Wi-Fi 地址登录
4. 使用 `~/.ssh/id_ed25519_git` 这把 key
最终验证通过的登录方式:
```sh
ssh -i ~/.ssh/id_ed25519_git root@192.168.72.3
```
后续为了简化操作,已在本机 [~/.ssh/config](/Users/gavin/.ssh/config) 中加入:
```sshconfig
Host kindle
HostName 192.168.72.3
User root
IdentityFile ~/.ssh/id_ed25519_git
IdentitiesOnly yes
PreferredAuthentications publickey
PasswordAuthentication no
KbdInteractiveAuthentication no
```
所以当前可直接:
```sh
ssh kindle
```
## 下次同型号设备的推荐顺序
### 1. 路由器和网络先处理
先确认这几项:
- Kindle 和 Mac 在同一个主 Wi-Fi
- 不是 Guest Wi-Fi
- ASUS Lyra Trio 中 `禁止无线用户互通` 为关闭
这一步的意义是先保证 Mac 能访问 Kindle 的 Wi-Fi 地址。今天前期大量时间都浪费在这里。
注意:
- Kindle 有时不回 `ping`
- 但这不等于 SSH 不通
- 真正应检查的是 `arp``nc -vz <ip> 22``ssh`
### 2. Kindle 端必装内容
建议固定安装:
- KUAL
- USBNetwork
- KTerm
- 本仓库 dashboard 文件
其中:
- USBNetwork 用于提供 `usbnet` 和调试工具
- KTerm 是本地 root shell是真正的兜底入口
今天的结论是:
一旦外部 SSH 不通,不要继续盲猜,直接进 KTerm 才是最快路线。
### 3. Dashboard 调试先关闭自动挂起
调试 dashboard 时,先在 KUAL 中执行:
1. `Dashboard Debug On`
2. `Kindle Dashboard`
调试结束后再执行:
1. `Dashboard Debug Off`
2. `Kindle Dashboard`
相关脚本:
- [dash/src/debug-on.sh](/Users/gavin/kindle-dash/dash/src/debug-on.sh)
- [dash/src/debug-off.sh](/Users/gavin/kindle-dash/dash/src/debug-off.sh)
- [dash/src/start-debug.sh](/Users/gavin/kindle-dash/dash/src/start-debug.sh)
- [dash/KUAL/kindle-dash/menu.json](/Users/gavin/kindle-dash/dash/KUAL/kindle-dash/menu.json)
核心经验:
- 调试时不要让设备自动 suspend
- 否则 KUAL 很容易刚打开就被挂起打断
## 今天确认过的关键事实
### 1. KUAL 的 `sshd up/down` 不是最终真相
今天多次出现:
- KUAL 显示 `sshd up`
- 但设备本机并没有 `sshd``dropbear` 进程
所以后续一律以本机 shell 为准:
```sh
/mnt/us/usbnet/bin/lsof -n -P -iTCP:22
ps -ef | grep -E 'sshd|dropbear'
```
### 2. `169.254.148.176` 不是 Kindle 的 USBNetwork 地址
这是今天最关键的坑之一。
我们最后确认:
- `169.254.148.176` 是 Mac 自己 USB 网卡的链路本地地址
- Kindle 在 `usbnet` 模式下的真实 USB IP 是 `192.168.15.244`
这个值来自当天在 Kindle 本机采集到的 `collect.log`
```text
usb0 inet addr:192.168.15.244
```
以及 `usbnet` 配置:
```sh
KINDLE_IP=192.168.15.244
```
也就是说:
- 之前对 `169.254.148.176` 的 SSH 测试,实际上是在连 Mac 自己那块接口
- 这就是为什么前面很多现象互相矛盾
### 3. USBNetwork 直连链路没有最终打通
即使:
- Mac 端给 `en8`/`en11` 配了 `192.168.15.201/24`
- Kindle 端 `dropbear` 看起来监听了 `*:22`
最终 ARP 仍然不通,表现为:
- `arp``192.168.15.244``incomplete`
- `nc -vz 192.168.15.244 22` 超时
所以这次真正可用的 SSH 入口,不是 USB 直连,而是 Wi-Fi。
### 4. 真正成功的是 Wi-Fi 上的 DropBear
最终确认:
- Wi-Fi IP 是 `192.168.72.3`
- 服务端 banner 是 `dropbear_2020.81`
- 成功接受的密钥是 `~/.ssh/id_ed25519_git`
验证结果:
- `nc -vz 192.168.72.3 22` 成功
- `ssh -i ~/.ssh/id_ed25519_git root@192.168.72.3 true` 成功
- 可拿到 `uid=0(root)`
### 5. 设备实际跑的是手工拉起的 DropBear
最终有效进程不是系统默认那份 OpenSSH而是我们在 Kindle 本机手工拉起的:
```sh
bin/dropbearmulti dropbear -F -E -p 22 -P /mnt/us/usbnet/run/dropbear-force-22.pid -n
```
其中:
- `-p 22` 监听 22 端口
- `-n` 是这个 Kindle hack 里的“禁用密码检查”开关
`dropbear -h` 已实机确认:
```text
-n Disable password checking (/!\ Kindle hack, don't use this!)
```
## 一次成的推荐操作
### A. 第一次准备
1. 越狱
2. 安装 KUAL
3. 安装 USBNetwork
4. 安装 KTerm
5. 同步 dashboard 到 `/mnt/us/dashboard`
6. 同步 KUAL 菜单到 `/mnt/us/extensions/kindle-dash`
### B. Dashboard 调试
1. KUAL -> `Dashboard Debug On`
2. KUAL -> `Kindle Dashboard`
3. 调试完成后再 `Dashboard Debug Off`
### C. SSH 启动的最短稳定路线
如果外部 SSH 一开始就不通,不要继续折腾 USB。
先把仓库里的 Kindle 辅助脚本复制到设备根目录:
```sh
scp /Users/gavin/kindle-dash/scripts/kindle/*.sh kindle:/mnt/us/
```
如果这时还没有 `ssh kindle`,也可以先通过 USB 存储模式手动拷到 `/mnt/us/`
然后在 Kindle 本机的 KTerm 里执行:
```sh
sh /mnt/us/ssh-force-dropbear-22.sh
/mnt/us/usbnet/bin/lsof -n -P -iTCP:22
```
必须看到类似:
```text
dropbear... TCP *:22 (LISTEN)
```
然后从 Mac 走 Wi-Fi 登录:
```sh
ssh -i ~/.ssh/id_ed25519_git root@192.168.72.3
```
或:
```sh
ssh kindle
```
### D. 登录成功后验证
登录后执行:
```sh
id
uname -a
ps -ef | grep -E 'sshd|dropbear|telnetd' | grep -v grep
```
应至少看到:
- `uid=0(root)`
- `dropbearmulti dropbear ... -p 22 ...`
## 今天踩过的坑
### 1. 不要一开始就把重点放在 USB 直连 SSH
USBNetwork 的确安装了,但:
- USBMS 和 USBNetwork 是互斥的
- USB 侧 IP 容易看错
- Mac 侧可能出现多个候选接口
- 接口名、ARP、链路状态都容易误判
所以:
- USB 更适合拷文件
- 真正稳定的远程入口优先走 Wi-Fi SSH
### 2. 不要相信 `ping` 单独判断
今天实际情况是:
- 某些阶段 `ping` 不通
-`ssh` 可以通
所以后续统一使用:
```sh
nc -vz <ip> 22
ssh <host>
```
### 3. 不要把 “出现 Password:” 等同于“密码一定对”
前期出现过:
```text
ssh root@...
Password:
```
这只能说明对端当时有 SSH 在监听。
不代表:
- 这就是正确的那份 SSH 服务
- 配置文件就是你刚改的那份
- 默认密码一定可用
### 4. 本机 shell 才是最终裁判
如果出现任何矛盾,比如:
- KUAL 说 `sshd up`
- Mac 连不上
- 改过配置却没生效
立即转入 KTerm本机检查
```sh
id
ps -ef
/mnt/us/usbnet/bin/lsof -n -P -iTCP:22
cat /mnt/us/usbnet/etc/config
```
## 今天留下的可复用资产
### 1. Dashboard 调试入口
已在仓库中加入:
- [dash/src/debug-on.sh](/Users/gavin/kindle-dash/dash/src/debug-on.sh)
- [dash/src/debug-off.sh](/Users/gavin/kindle-dash/dash/src/debug-off.sh)
- [dash/src/start-debug.sh](/Users/gavin/kindle-dash/dash/src/start-debug.sh)
- [dash/KUAL/kindle-dash/menu.json](/Users/gavin/kindle-dash/dash/KUAL/kindle-dash/menu.json)
### 2. Mac 侧 USBNetwork 辅助脚本
已在仓库中加入:
- [scripts/connect-kindle-usbnet-mac.sh](/Users/gavin/kindle-dash/scripts/connect-kindle-usbnet-mac.sh)
### 3. Kindle 侧 SSH 救援脚本
已在仓库中加入:
- [scripts/kindle/ssh-collect.sh](/Users/gavin/kindle-dash/scripts/kindle/ssh-collect.sh)
- [scripts/kindle/ssh-fix-all-keys.sh](/Users/gavin/kindle-dash/scripts/kindle/ssh-fix-all-keys.sh)
- [scripts/kindle/ssh-force-openssh-22.sh](/Users/gavin/kindle-dash/scripts/kindle/ssh-force-openssh-22.sh)
- [scripts/kindle/ssh-force-dropbear-22.sh](/Users/gavin/kindle-dash/scripts/kindle/ssh-force-dropbear-22.sh)
- [scripts/kindle/ssh-stop-all.sh](/Users/gavin/kindle-dash/scripts/kindle/ssh-stop-all.sh)
推荐复制方式:
```sh
scp /Users/gavin/kindle-dash/scripts/kindle/*.sh kindle:/mnt/us/
```
作用:
- 自动尝试 `en8``en11`
- 给候选接口加 `192.168.15.201/24`
- 探测 `192.168.15.244:22`
- 如果 USB 链路能通,再继续尝试 SSH
这次虽然最终证明 USB 不是稳定入口,但这个脚本保留着仍有价值。
## 建议的下次标准流程
下次同型号设备,推荐严格按下面顺序:
1. 先关掉路由器无线隔离,确保 Kindle 和 Mac 在同一主 Wi-Fi。
2. 先把 dashboard 的 `Debug On/Off` 菜单装好。
3. 先装 KTerm不要等 SSH 坏了才找本地终端。
4. 初次调试先用 `Dashboard Debug On`,避免设备自动挂起。
5. SSH 优先目标设为 Wi-Fi不要优先押宝 USB 直连。
6. 外部 SSH 不通时,立即转 KTerm。
7. 在 KTerm 手工拉起 `dropbear` 后,再从 Mac 走 Wi-Fi 登录。
8. 登录成功后再考虑要不要继续优化 USBNetwork 或持久化 SSH 配置。
## 当前最短命令
### Kindle 端
```sh
sh /mnt/us/ssh-force-dropbear-22.sh
```
### Mac 端
```sh
ssh kindle
```
如果 `ssh kindle` 不通,先确认:
- Kindle 还连着 Wi-Fi
- 当前 IP 还是 `192.168.72.3`
- `dropbear` 还在 `*:22` 监听
## 最后一条经验
今天真正节省时间的做法不是“继续猜”,而是尽快把问题缩到:
- 这是网络层问题
- 这是进程问题
- 这是 key 问题
- 还是这是错误 IP 问题
一旦拿到本机 KTerm root shell排障效率会比外部盲试高一个数量级。