WSL 通过 adb 连接宿主机下的安卓设备
本教程将会教你如何在不修改 wsl 内核和不安装多余的插件的情况下通过 ssh 创建隧道再通过 adb 连接宿主机下的 android 设备
环境说明
- 宿主机: Windows 10 (19045.5608)
- wsl: Ubuntu 24.04.3 LTS
必备知识
首先学习一下 adb 的工作方式, adb 采用 客户端<->服务端<->设备 的架构
adb server:服务端, 这是一个在 PC 上长期运行的后台进程, 当执行adb命令时都会先与该服务通信adb daemon:守护进程(adbd), 该进程是在 android 设备上运行的后台进程adb client:客户端, 这是我们在 PC 上执行adb命令时调用的程序, 每当执行一条该命令, 都是一个独立的客户端5037 端口: adb server 通信端口(这个端口是由 Android 开源项目在最初设计时人为指定的, 为了避免与其他常见服务冲突而规定的端口)
原理
通过 ssh 将 wsl 中的 5037 端口转发到宿主机的 0.0.0.0:5037 端口, 从而实现 wsl 中的 adb client 连接到 windows 的 adb server, 通过 ssh 转发后相当于直接将 wsl 的端口绑定到宿主机了, 宿主机连接了哪些设备, 相应的, wsl 中的 adb server 也连接了这些端口
必要环境
在 wsl 中执行以下命令
1 | sudo apt install openssh-server |
创建 SSH 转发隧道
在 windows 中执行以下命令
1 | ssh -R 0.0.0.0:5037:127.0.0.1:5037 <wsl_user>@<wsl_ip> -f -N |
命令分解
-R这是关键参数,表示远程端口转发(Reverse tunneling):
- 本地机器:SSH 客户端所在的机器(执行命令的地方)
- 远程机器:SSH 服务器所在的机器(username@wsl_ip)
0.0.0.0:5037:127.0.0.1:5037这个格式是 [远程绑定地址]:[远程端口]:[本地地址]:[本地端口]
0.0.0.0:5037(远程端):0.0.0.0:在远程机器上监听所有网络接口5037:在远程机器上打开的端口127.0.0.1:5037(本地端):127.0.0.1:本地回环地址(localhost)5037:本地机器上的 ADB Server 端口
<wsl_user>@<wsl_ip>ssh 连接的目标机器和用户
wsl_user: wsl 中的用户名wsl_ip: wsl 的 IP 地址
-f后台运行
-N不执行远程命令,只建立隧道
数据流向图解
1 | 远程机器 (WSL) 本地机器 (Windows) |
可能遇到的问题
创建隧道后,wsl 还是无法访问到设备:
在 wsl 执行
adb kill-server再重试adb devices如何关闭该隧道
选其一即可
- 在 Windows 的任务管理器中找到名称为 ssh 的任务,终止
- 在 CMD 中输入
taskkill /F /IM ssh.exe - 在 WSL 中输入
pkill sshd
- 标题: WSL 通过 adb 连接宿主机下的安卓设备
- 作者: CListery
- 创建于 : 2025-10-16 17:22:57
- 更新于 : 2025-12-05 11:01:11
- 链接: http://clistery.github.io/2025/10/16/wsl/adb-connect-host-android-device/
- 版权声明: 本文章采用 CC BY-NC-SA 4.0 进行许可。
评论