Files
kindle-calendar/dash/docs/kindle-voyage-5.13.6-dual-ssh-playbook-zh.md
2026-03-15 14:54:51 +08:00

413 lines
9.5 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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排障效率会比外部盲试高一个数量级。