# 📱 手机 SSH 隧道访问 DSH — 配置步骤

## 目标

手机浏览器访问 `http://localhost:3080` → 通过 SSH 隧道到 DSH 127.0.0.1:3080 → 看到完整 DSH 界面（settings 配置面板、Agent 预设都能用）。

---

## Termux 侧（已完成 ✅）

- SSH key 已生成：`~/.ssh/dsh-mobile-tunnel` (private) + `.pub` (public)
- Termux sshd 已 listen 8022
- DSH 在 127.0.0.1:3080 跑着

**手机 SSH 客户端需要这个 private key**：

```
~/.ssh/dsh-mobile-tunnel
```

这是 ed25519 格式，文本形式，复制到手机 app 即可。

---

## 手机侧（你需要做的）

### Step 1: 装 SSH app（任选一）

**JuiceSSH**（推荐，免费，开源）—— Google Play / F-Droid
**Termius**（跨平台，云同步）—— Google Play / App Store
**ConnectBot**（开源）—— Google Play / F-Droid

### Step 2: 把 private key 传到手机

**最简办法**：用 JuiceSSH 直接在 app 内生成 key，再把 public key 加到 Termux。

但因为你这边是手动加 key 的，**反过来做**：

1. 在手机 JuiceSSH app 里打开菜单 → 设置 → 身份 → 新建 → 类型 `Ed25519` → 自动生成
2. JuiceSSH 会给你一个 **public key**（形如 `ssh-ed25519 AAAA...`）
3. 把这个 public key 发给 Termux（微信 / 飞书 / 任何渠道）
4. 在 Termux 跑：`echo "你收到的 public key" >> ~/.ssh/authorized_keys`

**注意**：你 Termux 已经生成的 private key 是 **Termux 自己的**，不能直接传给手机（手机 app 通常不认"外部 private key"，会要求自己生成）。

### Step 3: JuiceSSH 配置连接

- 打开 JuiceSSH → Connections → "+" 添加
- **Address**: `192.168.4.50`
- **Identity**: 选你 Step 2 生成的
- **Port**: `8022`
- 保存

### Step 4: 配置端口转发

- 长按刚创建的连接 → Edit
- 找到 **Port Forwarding** / **端口转发** 部分
- 添加：
  - **Type**: `Local`
  - **Source port**: `3080`
  - **Destination**: `127.0.0.1`
  - **Destination port**: `3080`
- 保存

### Step 5: 连接 + 浏览器

1. 在 JuiceSSH 里点击你创建的连接
2. 第一次会要求确认 host key，点 "Always"
3. 连接成功后会看到 Termux shell 提示符
4. **保持连接不退出**
5. 打开手机 Firefox / HeyTap / Chrome 浏览器
6. 访问 `http://localhost:3080`

应该看到 DSH 完整界面！

---

## Termius 替代步骤

如果你用 Termius：

1. 装 Termius → 注册（可选云同步）
2. Hosts → "+ New Host"
3. **Address**: `192.168.4.50`
4. **Port**: `8022`
5. **Username**: `u0_a323`
6. **Key**: 选你 Step 2 生成的
7. 保存 → 点击连接
8. **Port Forwarding**（在 Host 设置里）：添加 Local 3080 → 127.0.0.1:3080
9. 浏览器开 `http://localhost:3080`

---

## 验证清单

打开 DSH 后应该看到：

- ✅ DSH 主页加载
- ✅ Sidebar 显示对话 + 历史
- ✅ 点 "设置" → "模型" 应该能加载（之前 HTTPS 8443 时显示 "settings are unavailable"）
- ✅ "加载提供方目录失败" 应该消失
- ✅ Agent 预设页面能加载
- ✅ 模型选择器显示所有 38 个 providers

---

## 排错

**连接失败 / Permission denied**：
1. 确认 Termux authorized_keys 里有手机 public key
2. 确认手机 JuiceSSH 用的 identity 是匹配的 private key
3. 确认手机 IP 和 Termux 在同一网段（192.168.4.x）

**SSH 连接成功但浏览器看不到 DSH**：
1. 确认端口转发配置正确（Local 3080 → Remote 127.0.0.1:3080）
2. 在 JuiceSSH 连接时启用端口转发（一般在连接时默认启用）

**DSH 报 "settings are unavailable"**：
1. 确认你访问的是 `http://localhost:3080`（不是 HTTPS 8443）
2. 在 Termux 跑 `~/dsh-tunnel-server.sh` 看 DSH 状态

---

## Termux 端常见操作

```bash
# 看 DSH + SSH 状态
~/dsh-tunnel-server.sh

# 重启 DSH (如果挂了)
ps -ef | grep "bin.js web" | grep -v grep | awk '{print $2}' | xargs -r kill
sleep 4
proot-distro login ubuntu -- bash -c "cd /root/dsh && exec node apps/cli/lib/bin.js web --port 3080 --host 127.0.0.1 --no-open --trusted-host 127.0.0.1 --trusted-host 192.168.4.50 --trusted-host localhost" </dev/null >~/logs/dsh-termux.log 2>&1 &

# SSH 状态
pgrep -af sshd

# 看手机连接日志
tail -f ~/../usr/var/log/sv/sshd/current
```

---

## 关键事实

- **SSH 隧道走 HTTP localhost，不是 HTTPS 8443**——DSH 看到 127.0.0.1 直接放行所有 settings
- **SSH port 8022，不是 22**（Termux 默认）
- **ed25519 key，2048位 RSA 也行但 ed25519 更短更快**
- **手机 JuiceSSH / Termius / ConnectBot 任一都行**