iOS | SSH | Objective-C
1.通过USB进行SSH登录
默认情况下,由于SSH走的是TCP协议,Mac是通过网络连接的方式SSH登录到iPhone,要求iPhone连接WiFi
为了加快传输速度,也可以通过USB连接的方式进行SSH登录
1> Mac上有个服务程序usbmuxd(它会开机自动启动),可以将Mac的数据通过USB传输到iPhone:
/System/Library/PrivateFrameworks/MobileDevice.framework/Resources/usbmuxd
2.usbmuxd的使用
- 下载usbmuxd工具包(下载v1.0.8版本,主要用到里面的一个python脚本:tcprelay.py)
https://cgit.sukimashita.com/usbmuxd.git/snapshot/usbmuxd-1.0.8.tar.gz
如果下载失败,可尝试点此下载:usbmuxd-1.0.8.tar.gz - 将iPhone的22端口(SSH端口)映射到Mac本地的10010端口
1> cd ~/Documents/usbmuxd-1.0.8/python-client
2> python tcprelay.py -t 22:10010
加上-t参数是为了能够同时支持多个SSH连接 - 注意:要想保持端口映射状态,不能终止此命令行(如果要执行其他终端命令行,请新开一个终端界面)
- 不一定非要10010端口,只要不是保留端口就行
- 端口映射完毕后,以后如果想跟iPhone的22端口通信,直接跟Mac本地的10010端口通信就可以了
- 新开一个终端界面,SSH登录到Mac本地的10010端口(以下方式2选1)
1> ssh root@localhost -p 10010
2> ssh root@192.168.31.26 -p 10010
注:(1) localhost是一个域名,指向的IP地址是192.168.31.26,本机虚拟网卡的IP地址
(2) usbmuxd会将Mac本地10010端口的TCP协议数据,通过USB连接转发到iPhone的22端口 - 远程拷贝文件也可以直接跟Mac本地的10010端口通信
1> scp -P 10010 ~/Desktop/test.txt root@localhost:~/test
2> 将Mac上的~/Desktop/test.txt文件,拷贝到iPhone上的~/test路径
注意:scp的端口号参数是大写的-P
3.sh脚本文件
- 我们可以将经常执行的一系列终端命令行(比如:刚才提到的端口映射、ssh登录)放到sh脚本文件中(shell),然后执行脚本文件
- 可以通过sh、bash、source命令来执行sh脚本文件
sh、bash:
1> 当前shell环境会启动一个子进程来执行脚本文件,执行后返回到父进程的shell环境
2> 执行cd时,在子进程中会进入到cd的目录,但是在父进程中环境并没有改变,也就是说目录没有改变
source:
1> 在当前的shell环境下执行脚本文件
2> 执行cd后会跳转到cd的目录
4.iOS终端的中文乱码问题
- 默认情况下,iOS终端不支持中文输入和显示
- 解决方案:新建一个~/.inputrc文件,文件内容是
1> 不将中文字符转化为转义序列 :
set convert-meta off
2> 允许向终端输出中文:
set output-meta on
3> 允许向终端输入中文:
set meta-flag on
set input-meta on - 如果是想在终端编辑文件内容,可以通过Cydia安装一个vim(软件源http://apt.saurik.com)