Mac通过SSH登录iOS设备
Contents
本文非原创, 是在学习李明杰课程后的知识整理,方便自己复习,也给正好需要的伙伴提供方便。
基础概念
SSH
在学习Mac通过SSH登录iOS设备之前,我们先学习一下,SSH是什么?
以下解释来自百度百科:
SSH 为 [Secure Shell](https://baike.baidu.com/item/Secure Shell) 的缩写,由 IETF 的网络小组(Network Working Group)所制定;SSH 为建立在应用层基础上的安全协议。SSH 是较可靠,专为远程登录会话和其他网络服务提供安全性的协议。利用 SSH 协议可以有效防止远程管理过程中的信息泄露问题。SSH最初是UNIX系统上的一个程序,后来又迅速扩展到其他操作平台。SSH在正确使用时可弥补网络中的漏洞。SSH客户端适用于多种平台。几乎所有UNIX平台—包括HP-UX、Linux、AIX、Solaris、Digital UNIX、Irix,以及其他平台,都可运行SSH。
SSH 功能
传统的网络服务程序,如:fpt, pop,telenet在本质上都是不安全的,因为它们在网络上用明文传送口令和数据,别有用心的人会非常容易截获这些口令和数据。 而且,这些服务程序的安全验证方式也是有其弱点的,就是很容易收到 中间人攻击 (man-in-the-middle) 这种方式的攻击。
所谓的 中间人 的攻击方式, 就是中间人冒充真正的服务器接收你传给服务器的数据,然后再冒充你把数据传输给真正的服务器。 服务器和你之间的数据传输被 中间人 一转手做了手脚之后,就会出现严重的问题。
通过SSH,你可以把所有传输的数据进行加密,这样 中间人这种攻击方式就不可能实现了,而且也能够防止DNS欺骗,IP欺骗, 使用SSH,还有一个额外的好处就是传输的数据是经过压缩的,所以可以加快传输的速度。
SSH验证
从客户端来看,SSH提供两种级别的安全验证。
第一种级别 (基于口令的安全验证)
只要你知道自己的账号和口令,就可以登录到远程主机。 所有传输的数据都会被加密,但是不能保证你正在连接的服务器就是你想连接的服务区。 可能会有别的服务器冒充真正的服务器,也就是受到 中间人攻击。
第二种级别 (基于密钥的安全验证)
需要依靠密钥,也就是你必须为自己创建一堆密钥,并把公用密钥放在需要访问的服务器上。
如果你要连接在SSH服务器上,客户端软件就会向服务器发出请求,请求时用你的密钥进行安全验证。服务器收到请求之后,先在该服务器上你的主目录下寻找你的公有密钥,然后把它和你发送过来的公用密钥进行比较。
如果两个密钥一致,服务器就用公用密钥加密质询并把它发送给客户端软件。客户端收到 质询之后就可以用你的私钥解密再把它发送给服务器。
用这种方式,你必须知道自己密钥的口令。 但是,与第一种级别相比,第二种级别不需要在网络上传送口令。
第二种级别不仅加密所有传送的数据,而且 中间人 这种攻击方式也是不可能的(因为它没有你的私钥)。 但是整个登录过程可能需要10秒。
OpenSSH
OpenSSH 是 SSH (Secure SHell) 协议的免费开源实现。SSH协议族可以用来进行远程控制, 或在计算机之间传送文件。而实现此功能的传统方式,如telnet(终端仿真协议)、 rcp ftp、 rlogin、rsh都是极为不安全的,并且会使用明文传送密码。OpenSSH提供了服务端后台程序和客户端工具,用来加密远程控制和文件传输过程中的数据,并由此来代替原来的类似服务
简介
OpenSSH是使用SSH透过计算机网络加密通讯的实现。它是取代由SSH Communications Security所提供的商用版本的开放源代码方案。目前OpenSSH是OpenBSD的子计划。
OpenSSH常常被误认以为与OpenSSL有关联,但实际上这两个计划的有不同的目的,不同的发展团队,名称相近只是因为两者有同样的软件发展目标──提供开放源代码的加密通讯软件。
服务
OpenSSH服务,sshd,是一个典型的独立守护进程(standalone daemon),但也可以根据需要通过网络守护进
程(Internet Daemon)-inetd(注3)或Ineternet Daemon’s more modern-xinted加载。OpenSSH服务可以通过/etc/ssh/sshd_config文件进行配置
SSL
SSL(Secure Sockets Layer 安全套接字协议),及其继任者传输层安全(Transport Layer Security,TLS)是为网络通信提供安全及数据完整性的一种安全协议。TLS与SSL在传输层与应用层之间对网络连接进行加密。
简介:
SSL协议位于TCP/IP协议与各种应用层协议之间,为数据通讯提供安全支持。SSL协议可分为两层: SSL记录协议(SSL Record Protocol):它建立在可靠的传输协议(如TCP)之上,为高层协议提供数据封装、压缩、加密等基本功能的支持。 SSL握手协议(SSL Handshake Protocol):它建立在SSL记录协议之上,用于在实际的数据传输开始前,通讯双方进行身份认证、协商加密算法、交换加密密钥等。
提供服务
2)加密数据以防止数据中途被窃取;
3)维护数据的完整性,确保数据在传输过程中不被改变。
OpenSSL
在计算机网络上,OpenSSL是一个开放源代码的软件库包,应用程序可以使用这个包来进行安全通信,避免窃听,同时确认另一端连接者的身份。这个包广泛被应用在互联网的网页服务器上。
Mac通过SSH登录iOS设备
连接流程
- 我们经常在Mac的终端上,通过敲一些命令来完成一些操作
- iOS 和 Mac OS X 都是基于 Darwin (苹果的一个基于Unix的开源系统内核), 所以iOS同样支持终端的命令行操作。
- 在逆向工程中,我们经常会通过命令行来操纵iPhone
- 为了能够让mac终端中的命令行能够作用在iPhone上,首先等让 Mac 和 iPhone建立连接
- 通过Mac 远程登录到 iPhone的方式建立连接
本文上部分引用了百度百科中对 SSH, OpenSSH, SSL, OpenSSL的简介。
Mac就可以通过 SSH 的方式 登录到 iOS设备。步骤如下:
-
在iPhone上通过 Cydia 安装 OpenSSH工具
-
SSH是通过TCP协议通信,所以要确保Mac 和 iPhone在同一局域网下,比如连接着同一个wifi
- 在Mac的终端输入指令 ssh 账户名@服务器主机地址
- 比如 ssh root@192.168.0.104 (这里的服务器是手机)
- 初始密码 alpine
- 在Mac的终端输入指令 ssh 账户名@服务器主机地址
-
登录成功后,就可以使用终端命令来操作iPhone
-
退出命令是exit
root 和 mobile
- iOS下有2个常用账户 : root 和 mobile
- root: 最高权限的账户, $HOME是 /var/root
- mobile: 普通权限账户,只能操作一些普通文件,不能操作系统级别的文件。$HOME是/var/mobile
- 登录mobile账户时命令: root mobile@服务器地址
- root 和 mobile 用户的初始登录密码都是 alpine
SSH通信过程
建立安全连接
- 在建立安全连接中,服务器会提供自己的身份证明
- 服务器发送公钥等信息给客户端
- 如果客户端并无服务器端的公钥信息, 就会询问是否连接此服务器
客户端认证
-
SSH-2 提供了两种常用的客户端认证方式
- 基于密码的客户端认证
- 使用密码和账户可认证
- 基于密钥的客户端认证
- 免密码认证
- 最安全的一种认证方式
- 基于密码的客户端认证
-
SSH-2会默认优先尝试 密钥认证, 如果认证失败,才会尝试 密码认证
SSH - 基于密钥的客户端认证
- 在客户端生成一堆相关联的密钥(Key Pair) : 一个公钥(Public key), 一个私钥(Private key)
- ssh-keygen
- 一路 enter 即可
- OpenSSH默认生成的是RSA密钥,可以通过 -t 参数指定密钥类型
- 生成的公钥 : ~/.ssh/id_rsa.pub
- 生成的私钥 : ~/.ssh/id_rsa
- ssh-keygen
- 把客户端的公钥内容追加到服务器的授权文件 (~/.ssh/authorized_keys) 尾部
- ssh-copy-id root@服务器地址
- 需要输入root用户的登录密码
- ssh-copy-id会将客户端~/.ssh/id_rsa.pub的内容自动追加到服务器的~/.ssh/authorized_keys尾部
22端口
-
端口就是设备对外提供服务的窗口,每个端口都有个端口号(范围是0~65535,共2^16个)
-
有些端口号是保留的,已经规定了用途,比如
-
21端口提供FTP服务
-
80端口提供HTTP服务
-
22端口提供SSH服务(可以查看/etc/ssh/sshd_config的Port字段)
-
更多保留端口号: https://baike.baidu.com/item/%E7%AB%AF%E5%8F%A3%E5%8F%B7/10883658#4_3
-
iPhone默认是使用22端口进行SSH通信,采用的是TCP协议
通过USB进行SSH登录
-
默认情况下,由于SSH走的是TCP协议,Mac是通过网络连接的方式SSH登录到iPhone,要求iPhone连接WiFi
-
为了加快传输速度,也可以通过USB连接的方式进行SSH登录
-
Mac上有个服务程序usbmuxd(它会开机自动启动),可以将Mac的数据通过USB传输到iPhone
-
/System/Library/PrivateFrameworks/MobileDevice.framework/Resources/usbmuxd
usbmuxd的使用
-
下载usbmuxd工具包(下载v1.0.8版本,主要用到里面的一个python脚本:tcprelay.py)
-
https://cgit.sukimashita.com/usbmuxd.git/snapshot/usbmuxd-1.0.8.tar.gz
-
将iPhone的22端口(SSH端口)映射到Mac本地的10010端口
- cd ~/Documents/usbmuxd-1.0.8/python-client
- python tcprelay.py -t 22:10010
-
加上-t参数是为了能够同时支持多个SSH连接
-
注意:要想保持端口映射状态,不能终止此命令行(如果要执行其他终端命令行,请新开一个终端界面)
-
不一定非要10010端口,只要不是保留端口就行
-
端口映射完毕后,以后如果想跟iPhone的22端口通信,直接跟Mac本地的10010端口通信就可以了
- 新开一个终端界面,SSH登录到Mac本地的10010端口(以下方式2选1)
- ssh root@localhost -p 10010
- ssh root@127.0.0.1 -p 10010
- localhost是一个域名,指向的IP地址是127.0.0.1,本机虚拟网卡的IP地址
-
usbmuxd会将Mac本地10010端口的TCP协议数据,通过USB连接转发到iPhone的22端口
- 远程拷贝文件也可以直接跟Mac本地的10010端口通信
- scp -P 10010 ~/Desktop/1.txt root@localhost:~/test
- 将Mac上的~/Desktop/1.txt文件,拷贝到iPhone上的~/test路径
- 注意:scp的端口号参数是大写的-P
sh脚本文件
-
我们可以将经常执行的一系列终端命令行放到sh脚本文件中(shell),然后执行脚本文件
-
可以通过sh、bash、source命令来执行sh脚本文件
- sh、bash
- 当前shell环境会启动一个子进程来执行脚本文件,执行后返回到父进程的shell环境
- 执行cd时,在子进程中会进入到cd的目录,但是在父进程中环境并没有改变,也就是说目录没有改变
- source
- 在当前的shell环境下执行脚本文件
- 执行cd后会跳转到cd的目录
- source可以用一个点”.”来替代,比如”. test.sh”
- sh、bash
Author 飞熊
LastMod Jun 01