前言
iOS默认是使用22端口进行SSH通信,采用的是TCP协议,所以要求客户端(Mac)和服务器端(iPhone)在同一局域网中,如在同一WiFi中。
为了解除这种限制和加快传输速度,也可以通过USB连接的方式进行SSH登录。
实现原理
usbmuxd是USB - TCP的转换服务,这个服务在Mac端是由
/System/Library/PrivateFrameworks/MobileDevice.framework/Resources/usbmuxd提供的, 开机自动启动。它创建了一个Unix Domain Socket 在 /var/run/usbmuxd,usbmuxd服务程序监控iPhone在USB口上的连接, 当它监控到iPhone以用户模式连接到USB, (即recovery模式), usbmuxd服务程序就会连接到这个/var/run/usbmuxd的TCP端口, 并开始成为一个USB - TCP 请求转发器。那么,如果想编写个第三方程序与iphone进行通信,实现类似iTunes的功能, 你的程序可以通过usbmuxd! 建立一个TCP连接到/var/run/usbmuxd端口, 根据协议发送对应的请求包, usbmuxd服务会将请求转发到USB的iPhone上
Mac上有个服务程序usbmuxd(它会开机自动启动),可以将Mac的数据通过USB传输到iPhone。此程序路径:
/System/Library/PrivateFrameworks/MobileDevice.framework/Resources/usbmuxd。
usbmuxd官网软件包中提供了Python版本的实现。在python-client目录下。点击下载usbmuxb,单独保存python-client目录下的tcprelay.py和usbmux.py两个文件,把它们放到同一个目录下;
此命令表示将本地的8709端口转发到远端iOS设备22端口中。
其中-t参数表示能够同时支持多个SSH连接。
ssh登录:
ssh -p 8709 root@127.0.0.1
- 原理图如下: