SSH(下)

iOS | SSH | Objective-C

1.通过USB进行SSH登录

  • 默认情况下,由于SSH走的是TCP协议,Mac是通过网络连接的方式SSH登录到iPhone,要求iPhone连接WiFi
    SSH_Default

  • 为了加快传输速度,也可以通过USB连接的方式进行SSH登录
    1> Mac上有个服务程序usbmuxd(它会开机自动启动),可以将Mac的数据通过USB传输到iPhone:
    /System/Library/PrivateFrameworks/MobileDevice.framework/Resources/usbmuxd
    SSH_USB

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连接
    tcprelay
  • 注意:要想保持端口映射状态,不能终止此命令行(如果要执行其他终端命令行,请新开一个终端界面)
  • 不一定非要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),然后执行脚本文件
    testCD_sh
  • 可以通过sh、bash、source命令来执行sh脚本文件
    sh、bash:
    1> 当前shell环境会启动一个子进程来执行脚本文件,执行后返回到父进程的shell环境
    2> 执行cd时,在子进程中会进入到cd的目录,但是在父进程中环境并没有改变,也就是说目录没有改变
    source:
    1> 在当前的shell环境下执行脚本文件
    2> 执行cd后会跳转到cd的目录
    sh_bash_source

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)
    VI IMproved