一、简介
-
之前操作都是通过
客户端(MAC)
与服务端(iPhone)
处于同一个Wifi
下通过SSH
进行连接。 -
这种方式有个问题,就是网速不是很好的时候,输入一个命令会等一会才会显示,因为你输出成功了需要网络同步到手机上,你这边才会显示。
-
如果通过
USB
连接两者将SSH
传到服务端(iPhone)
就不会有这个问题了,效率也高。
二、端口介绍
-
端口就是设备对外提供服务的窗口,每个端口都有个端口号(范围是
0~65535
,共65536
个) -
有些端口号是保留的,已经规定了用途,比如:
- 更多的保留端口号:服务端口号列表
21
端口提供FTP
服务80
端口提供HTTP
服务22
端口提供SSH
服务(可以查看/etc/ssh/sshd_config
的Port
字段)
// 进入服务端(手机) dengzemiaodeMacBook-Pro:.ssh dengzemiao$ ssh root@10.0.89.184 // 进入 /etc/ssh 文件夹 iPhone:~ root# cd /etc/ssh // 查看文件夹 iPhone:/etc/ssh root# ls -l total 572 -rw-r--r-- 1 root wheel 577388 Jan 4 2020 moduli -rw-r--r-- 1 root wheel 1526 Mar 21 2018 ssh_config -rw-r--r-- 1 root wheel 3228 Mar 31 2019 sshd_config // 查看 sshd_config 服务端配置文件 iPhone:/etc/ssh root# cat sshd_config .....省略上下内容 #Port 22 // 这个就是指定的端口号 #AddressFamily any #ListenAddress 0.0.0.0 #ListenAddress :: .....省略上下内容
-
iPhone
默认是使用22
端口进行SSH
通信,采用的是TCP
协议。
三、Wifi
与 USB
连接的区别与思路
-
Wifi
连接- 由于
SSH
走的是TCP
协议,客户端(电脑)
直接以SSH
的方式通过网络(Wifi)
登录到服务端(iPhone)
,相当于电脑
是通过SSH
的方式直接访问22
端口连接了手机。
- 由于
-
USB
连接-
Mac
上有个服务程序usbmuxd
(它会开机自动启动) ,可以将Mac
的数据通过USB
传输到iPhone
。// usbmuxd 服务程序存放路径 /System/Library/PrivateFrameworks/MobileDevice.framework/Resources/usbmuxd
-
USB
连接则不能直接通过SSH
网络访问22
端口这么干了。 -
流程应该是通过
SSH
访问本机的其他窗口(只要不是 保留端口 即可,举例:10010),然后在由这个端口通过usbmuxd
连接服务端(手机)的22
端口,将数据传递过去,这样就避开了通过网络访问22
端口了。 -
需要将
客户端(电脑)
的10010
端口映射到服务端(手机)
的22
端口上,端口映射完毕后,以后如果想跟服务端(手机)
的22
端口通信,直接跟客户端(电脑)
本地的10010
端口通信就可以了。
-
四、端口映射
- 下载映射脚本:https://cgit.sukimashita.com/usbmuxd.git/snapshot/usbmuxd-1.0.8.tar.gz 并解压出来,只需要用到
python-client
文件夹中的tcprelay.py
usbmux.py
两个脚本文件。
- (可选)可以删掉其他所有文件,只保留这两个文件也可以的,不删也不妨碍,
cd
到里面文件夹也是一样的。
-
将
服务端(手机)
的22
端口 ( SSH端口 ) 映射到客户端(电脑)
本地的10010
端口。-
进入文件夹
usbmuxd
$ cd /Users/dengzemiao/Downloads/usbmuxd
-
执行映射命令,将
服务端(手机)
的22
端口与客户端(电脑)
本地的10010
端口建立映射连接关系,以后访问本地的10010
端口访问的就是服务端(手机)
的22
端口。// (推荐)加 -t 指令,支持电脑连接多台手机设备,也就是支持多个连接 $ python tcprelay.py -t 22:10010 // 不加 -t 指令,每次只能支持一个设备连接 $ python tcprelay.py 22:10010
-
命令输入之后,处于这样的状态就是连接成功了,这个映射窗口是不能关闭的,,关闭就映射关系取消了,所以做别的操作我们就需要新开一个终端窗口了。
-
映射成功之后,我们将不能在用
$ ssh root@10.0.89.184
这种访问方式了,这种是网络访问方式,现在我们需要访问本地的10010
端口即可,在新开终端窗口输入:// 将 IP 地址换成 localhost, -p 是端口号的意思 $ ssh -p 10010 root@localhost // 将 localhost 等于 127.0.0.1 $ ssh -p 10010 root@127.0.0.1 // 也可以将 -p 10010 写在后面,可以通过 $ ssh --help 查看书写规则 $ ssh root@localhost -p 10010
如果报错
ssh_exchange_identification: read: Connection reset by peer
, 检查一下USB
是否连接了手机,确定电脑USB
只连接了越狱手机,如果连接了多台手机或非越狱手机会报这个错误。// 连接 localhost 的 10010 端口 dengzemiaodeMacBook-Pro:~ dengzemiao$ ssh -p 10010 root@localhost The authenticity of host '[localhost]:10010 ([127.0.0.1]:10010)' can't be established. RSA key fingerprint is SHA256:TmFvst8CU2JJqrFZ1QIANzprd1rUckdYjV4lcVaS8Gk. // 跟之前 Wifi 网络连接一下,询问是否确定连接并存储授权公钥 Are you sure you want to continue connecting (yes/no)? yes // 成功连接 Warning: Permanently added '[localhost]:10010' (RSA) to the list of known hosts. iPhone:~ root# iPhone:~ root# exit logout Connection to localhost closed.
通过
USB
连接的环境下,你输入任何命令都会迅速响应或显示出来,不会像之前Wifi
连接的一样,输入命令之后会有延迟,而且在这个链接终端窗口上的每一次链接或者操作,映射那个终端窗口都会有数据输出。
-
五、通过 USB
拷贝传输文件、数据
-
Wifi
传递命令:$ scp ~/.ssh/id_rsa.pub root@10.0.89.184:~/.ssh
dengzemiaodeMacBook-Pro:.ssh dengzemiao$ scp ~/.ssh/id_rsa.pub root@10.0.89.184:~/.ssh // 这里需要输入密码,是因为我们上面第一步就将之前的授权文件删除了,所以现在是没有免密登录的了 root@10.0.89.184's password: id_rsa.pub 100% 403 10.1KB/s 00:00 dengzemiaodeMacBook-Pro:.ssh dengzemiao$
-
USB
传递命令:$ scp -P 10010 ~/.ssh/id_rsa.pub root@localhost:~/.ssh
-
scp -P 10010
是固定格式,指定端口,可以通过$ scp --help
进行查看, -
root@localhost
也就是将IP
地址换成localhost
本地,然后本地走10010
端口。 -
下面的传输速度与上面
Wifi
的传输输度比较一下。
dengzemiaodeMacBook-Pro:~ dengzemiao$ scp -P 10010 ~/.ssh/id_rsa.pub root@localhost:~/.ssh id_rsa.pub 100% 403 137.7KB/s 00:00
-
-
现在的这种方式,都是依赖于映射,但是只要关了映射那个窗口,映射关系就会消失,所以每次需要重新按上面的方式添加映射在进行连接。
-
下一章会专门将这个映射命令写成
sh脚本 (shell)
使用,然后只需要执行这些脚本文件即可,会比每次都去拖拽文件执行映射命令方便。 -
也看看
sh脚本
的简单编写与使用。