背景
- Termux只能通过鼠标点击,无法使用电脑键盘,输入速度很慢,你想通过ssh 连接Termux,获得友好体验
- 搞了个云手机,想像普通手机那样充当服务器
- 想把自己的手机公开到局域网中供同事调试
- 想把自己的模拟器公开到局域网中供同事调试
step 1 搞一台云手机
先搞到一台云手机(也就是在线云机,远程云手机,云测手机),这些云手机通常都是跑在服务端的模拟器(也有真机)
step2 配置Termux
- 进入云机,安装Termux
- 打开Termux 安装sshd,命令
pkg install openssh
- 生成ssh密钥,命令
ssh-keygen -A
- 执行
whoami
- 设置登录密码,命令
passwd
,按提示输入 - 启动sshd服务,命令
sshd
至此,你的Termux控制台应该已经成功的启动了sshd服务,它运行的默认端口是:8022,不是通常的22端口
step 3 怎么连接到云机内网的Termux开启的ssh服务
完成setp2后,你会突然发现一个问题,这些云手机通常都不具备公网ip,她们位于服务器电脑的虚拟机中,所以,你无法直接通过公网连接到Termux。
怎么办?
关键点在于,既然我们能访问到处于内网的云机,所以,它必定和出网口机器存在通信。
这个通信方式通常是类似这样的实现:
- 云机模拟器所有网络请求走到服务器电脑上,服务器电脑代为发送
- 服务器电脑收到的所有网络请求,属于模拟器的,进行转发
这种技术,通常有端口转发、虚拟网卡等。
这时候,咦!你发现了哗点
-
那我去服务器电脑上,设置端口转发到云机模拟器系统的Termux 的ssh服务不就好了?
-
是的,你可以这么做,包括
个人电脑上的模拟器,你也可以这么进行操作,从而开放到局域网、公网上,使大家都可以访问到!
-
然后你发现,你登录不到服务器对应的电脑(通常云机服务商,不会直接提供服务器登录),所以你颓然了。
但其实,获取还有一个办法
那就是adb
调试
step 4 Adb的妙用
adb
是一个安卓开发工具,是安卓调试桥的缩写。它实现了一个通信协议(socket实现),能够连接到手机中,进行apk安装,发送系统广播,执行命令等,许多投屏软件如scrcpy、乃至云手机厂商等就是通过这个方式来投屏或传输信息以及前后台通信......
等等,执行命令,你突然一个鸡灵!如果,如果,能够连接adb,那这不就是任意命令执行权限了吗?而且云机通常开启了root,这......
是的,没错,具备adb
连接方法的云手机,就是这么狂,就是这么猛,可以执行任意命令。
所以,你可以通过adb命令执行端口转发,将个人本机电脑的某个端口和云手机模拟器系统的8022端口关联起来,不需要登录到服务器电脑进行操作,adb帮你操作了。
step 5 如何获取adb调试地址
如果你是远程云机:
- 连接进入云手机。获取到云机的adb远程调试地址(部分云测厂商提供)
- 未提供的尝试抓包,看是否存在一个一直在交换数据的socket连接,然后获取到连接地址
如果你是本地真机:
- usb连接电脑,开启开发者调试模式
- adb devices
step6 ADB转发本机电脑端口上的网络请求到云手机内网端口8022
你得到了一个adb公网连接地址,如18.23.22.37:3200
- adb 连接云机,命令:
adb connect 18.23.22.37:3200
- adb 转发本机端口8021到云机端口8022,
adb -s 18.23.22.37:3200 forword tcp:8021 tcp:8022
,如果你只连接了一个设备,可以省略-s 18.23.22.37:3200 ,否则不能忽略,因为adb不知道你要对那个设备进行操作 - 打开你的ssh连接工具,你可以登录到Termux了
连接地址:127.0.0.1(因为转发到自己的电脑上了)
端口:8021 (执行命令时设置的转发端口,不一定是8022)
用户:去Termux上执行命令获取:whoami
使用命令行登录:ssh -X 用户@127.0.0.1:8021
大功告成,贴图
step7 狗尾续貂
远程云机都成功公开出去了,真机、模拟器还不简单?
对于模拟器:
- 一般市面上的模拟器启动的时候,会自行占用一个端口,将本机电脑某个端口转发到模拟器端口
- 电脑开启防火墙
也有的模拟器不需要转发,它已经开启了wifi调式。
判断标准是,adb device,带有ip地址的一般可以直接连接了。
不带ip地址的,需要寻找其端口。如android官方的模拟器,一般叫做emulator-5554,那么其端口就是5555,电脑转发127.0.0.1:xxx端口到这个端口就行
对于真机:
- 打开调式模式连接到电脑
- 同样adb设置转发到真机
- 电脑开启防火墙,让外部请求进入电脑,局域网or公网的兄弟就能访问到你的手机了
当然,也可以不进行转发,因为通过wifi调式,真机在局域网内也是可以通信的:
adb -s 设备id tcpip 6666
其他人电脑上执行:
adb connect 手机pi:6666
然后其他兄弟就可以连接到你手机上进行apk调式,安装termux,最后ssh连接了