📱 ADB over SSH 反向隧道

让在外的手机通过 adb tcpip + ssh -R 反向隧道,暴露给家里的电脑(macmini),实现远程 adb devices 设备发现与调试。
adb tcpipssh -Radb connect跨网络调试

网络交互图

整条链路:手机端设备开启 tcpip 监听 → 通过 SSH 反向隧道把端口打到 macmini → macmini 本地 adb 连接发现设备。

手机 / Android tcpip :5555 e49d82e0 (USB) 手机端电脑(跳板) ssh -R 5555:localhost:5555 gencylee@macmini 建立反向隧道 → macmini(家里) 127.0.0.1:5555 adb connect adb devices ✓ ① adb tcpip 监听 ② SSH 反向隧道 ③ adb 调试数据经隧道回流到手机 5555 macmini 上 adb 连到本地 5555,SSH 隧道把流量转发给手机端电脑,再直达手机 蓝=控制通道 绿=隧道建立 橙=调试数据流

1前提准备

三个角色,先确认清楚:

角色说明本教程示例
手机USB 连在手机端电脑上,开发者选项已开启 USB 调试e49d82e0
手机端电脑(跳板)adb 到手机、能 ssh 到 macmini你身边的笔记本
macmini(家里)装了 adb,接受 SSH 连接的目标机gencylee@macmini

确认手机已被识别:

adb devices

2手机开启 adb over tcpip

让手机在 5555 端口监听 adb 连接(在手机端电脑上执行):

adb -s e49d82e0 tcpip 5555
💡 -s e49d82e0 指定具体设备,多设备时必须加。执行后手机进入 tcpip 模式,此时可以拔掉 USB(同网络下 wifi 也能连)。

3建立 SSH 反向隧道

手机端电脑上,把本地的 5555 通过反向隧道映射到 macmini 的 5555

ssh -R 5555:localhost:5555 gencylee@macmini
⚠️ 端口要对齐! 你之前写的是 5055:localhost:5055,但手机监听的是 5555,adb connect 又连的 5555 —— 端口不一致会连不上。
格式:ssh -R [macmini监听端口]:localhost:[手机端本地端口] user@macmini,两端都应为 5555

这条命令的含义:macmini 上访问 127.0.0.1:5555 的流量,会被 SSH 隧道转发回手机端电脑的 localhost:5555,也就是手机的 adb 端口。

4macmini 连接并发现设备

保持上面的 SSH 会话不断开,在 macmini 上执行:

adb connect 127.0.0.1:5555 && adb devices
✅ 看到类似 127.0.0.1:5555   device 就成功了。之后 adb shelladb install、scrcpy 投屏等都能直接用。

5完整命令速查

手机端电脑 ① 开 tcpip   ② 建隧道

# ① 手机开启 tcpip 监听
adb -s e49d82e0 tcpip 5555

# ② 反向隧道到 macmini(端口对齐 5555)
ssh -R 5555:localhost:5555 gencylee@macmini

macmini ③ 连接发现

adb connect 127.0.0.1:5555 && adb devices

6保活(可选)

SSH 隧道容易因网络波动断开,用 autossh 自动重连:

autossh -M 0 -N -R 5555:localhost:5555 gencylee@macmini \
  -o "ServerAliveInterval 30" \
  -o "ServerAliveCountInterval 3" \
  -o "ExitOnForwardFailure yes"
-N 不开远程 shell 只做转发,-M 0 关闭 autossh 自带监控改用 SSH 保活参数。

7常见问题排查

现象原因 / 解决
connection refused端口不一致(隧道用了 5055 但手机是 5555),改成两端都 5555;或手机没执行 tcpip。
device offline在 macmini 上 adb kill-server 后重新 adb connect
隧道秒断ServerAliveInterval 保活,或用 autossh。
macmini 已占用 5555换端口:隧道 -R 5556:localhost:5555,连接 adb connect 127.0.0.1:5556
拔 USB 后掉线tcpip 模式依赖同网络可达手机 IP;跨网络时手机端电脑必须始终能 adb 到手机。
🔒 安全提示:adb 无认证。仅把端口绑在 127.0.0.1(默认即是),不要 -R 0.0.0.0:5555 暴露到 macmini 公网,否则任何人都能调试你的手机。