资讯动态

如何用 SSH 隧道连接远程 adb 服务器实现 scrcpy 远程投屏

发布时间:2026/9/11 15:49:53 来源:尧图企业网站定制
如何用 SSH 隧道连接远程 adb 服务器实现 scrcpy 远程投屏【免费下载链接】scrcpyDisplay and control your Android device项目地址: https://gitcode.com/GitHub_Trending/sc/scrcpyAndroid 设备连在另一台电脑上而本地电脑没有设备接入时scrcpy 无法直接镜像它。scrcpy 通过隧道机制解决这个问题让本地的adb客户端去连接远程机器上的adb服务器scrcpy 客户端则照常在本地运行。当两台机器之间的链路不可信例如经过互联网时文档推荐用 SSH 隧道来加密这段通信而不是让远程 adb 服务器直接暴露端口。完成本场景的前提是本地电脑装有 scrcpy 客户端与adb远程电脑上装有adb并且 Android 设备已连接在远程电脑上USB 或同一网络本地可以 SSH 登录远程电脑。另外本地adb客户端与远程adb服务器应使用相同版本的 adb 协议。连接链路说明整条链路涉及两个端口这也是后面 SSH 命令中两组转发的含义所在5037adb 服务器的控制端口。scrcpy 通过环境变量ADB_SERVER_SOCKET指定要连接的 adb 服务器地址SSH 隧道把本地 5038 端口转发到远程机器的 5037 端口。27183scrcpy 建立 adb 隧道所用的本地端口即adb forward使用的端口--port的默认值。按 doc/develop.md 的说明默认情况下未设置--force-adb-forward时网络层面的客户端与服务端角色是反转的scrcpy 客户端先在本地监听一个端口设备端主动连过来。这就是为什么 SSH 命令里需要一条反向转发-R把远程机器的 27183 转发回本地的 27183让设备端能穿过隧道连到本地 scrcpy。建立 SSH 隧道并启动 scrcpy第一步确认远程电脑上的 adb 服务器在运行在远程电脑上执行adb start-server第二步在本地建立 SSH 隧道your_remote_computer替换为你 SSH 登录远程电脑所用的主机含用户名例如user192.168.1.2。该命令执行后会停留在前台必须保持这个终端一直开着隧道才有效# local 5038 -- remote 5037 # local 27183 -- remote 27183 ssh -CN -L5038:localhost:5037 -R27183:localhost:27183 your_remote_computer # keep this open第三步在另一个终端运行 scrcpyADB_SERVER_SOCKET指向 SSH 隧道映射出来的本地 5038 端口# in bash export ADB_SERVER_SOCKETtcp:localhost:5038 scrcpyWindows 下两种 shell 的写法均来自 doc/tunnels.md:: in cmd set ADB_SERVER_SOCKETtcp:localhost:5038 scrcpy# in PowerShell $env:ADB_SERVER_SOCKET tcp:localhost:5038 scrcpy启动后 scrcpy 窗口显示出连在远程电脑上的那台设备的画面说明链路已打通此后的操作与镜像本地设备完全一致。避免启用远程端口转发上面命令中的-R要求 SSH 服务端允许远程端口转发。如果受限可以改用两条-L转发都是本地到远程方向让 scrcpy 强制使用adb forward而不是adb reverse# local 5038 -- remote 5037 # local 27183 -- remote 27183 ssh -CN -L5038:localhost:5037 -L27183:localhost:27183 your_remote_computer # keep this open然后另一个终端中运行export ADB_SERVER_SOCKETtcp:localhost:5038 scrcpy --force-adb-forward按 man 页 的定义--force-adb-forward的作用是“Do not attempt to use adb reverse to connect to the device”即不再尝试让设备端主动回连本地改由本地主动连接远程转发的 27183 端口因此这条路径不需要-R。隧道端口被占用或链路更复杂时如果 27183 与预期不一致例如经过多级转发、端口重定向可以用--tunnel-port强制指定建立 adb 隧道的本地端口scrcpy --tunnel-port1234按 man 页 说明--tunnel-port的默认值为 0不强制此时 scrcpy 使用建立隧道所用的本地端口。doc/tunnels.md 指出这种强制指定端口在“涉及更多重定向的复杂情况”下有用。可选分支不经 SSH 直连远程 adb 服务器doc/tunnels.md 还给出了一条更直接的替代路径让远程 adb 服务器监听所有接口本地直接连它。在远程电脑上执行注意adb kill-server会先终止该机器上现有的 adb 服务器进程再以前台方式重启adb kill-server adb -a nodaemon server start # keep this open然后在本地终端设置环境变量并指定隧道主机 IP以远程电脑 IP 为 192.168.1.2 为例替换成实际地址export ADB_SERVER_SOCKETtcp:192.168.1.2:5037 scrcpy --tunnel-host192.168.1.2文档对这条路径有明确警告客户端与 adb 服务器之间的所有通信都是不加密的所以仅在可信网络内使用跨不可信链路应回到前面的 SSH 隧道方案。设备选择与限制如果远程电脑上同时连接了多台设备scrcpy 不会自动选择需要按 doc/connection.md 的方式指定例如scrcpy --serial0123456789abcdef或scrcpy -d只选 USB 设备、scrcpy -e只选 TCP/IP 设备。SSH 隧道是前台进程终端关闭即断开scrcpy 会失去连接需要重连时重新执行 ssh 命令即可。直连远程 adb 服务器非 SSH时通信不加密这一点由文档明确标出按网络可信度自行取舍。【免费下载链接】scrcpyDisplay and control your Android device项目地址: https://gitcode.com/GitHub_Trending/sc/scrcpy创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价