Open Secure Shell(OpenSSH)是一个安全的登录系统,可以用来替代telnet、rlogin、rcp等。简单的讲,ssh 是一个通过网络登录进入另一台计算机的程序。openSSH 是其中的一种软件。我们可以利用电脑通过 OpenSSH 软件,远程登录到我们的手机。
一、通过openSSH连接(登录)手机(wifi连接)
$ssh 用户名@用户服务器地址
//注:这里的服务器指手机(下同)
iOS 下有两个用户
- root(最高权限)用户 $HOME:/var/root
iPhone:~ root#
- 还有一个 mobile(普通)用户 $HOME: /var/mobile
iPhone:~ mobile$
mobile 不能操作系统级别的文件
删除SSH服务器对应的公钥
$ssh-keygen -R 服务器IP地址
修改ssh登录密码
- passwd 输入两次新密码
关闭openSSH连接
$exit
SSH
SSH是一种网络协议.用于计算机之间的加密登录!
openSSH 是其中的一种软件.
SSH通讯过程
中间人攻击(Man-in-the-MiddleAttack,简称“MITM攻击”)
如果登录同一个服务器(IP),它的公钥(哈希值)发生了变化,它就不会让你登录了,它会判断有中间人攻击。本地一个IP:端口只能保存一个公钥。
预防中间人攻击最有效的方法就是验证【公钥是不是服务器的】!!
如果是公开的 SSH 服务器,一般会将公钥的哈希值【公布在网站上】!!
我们在终端第一次连接 SSH 服务器时,会提示:
The authenticity of host '101.2.79.32 (101.2.79.32)' can't be established.
RSA key fingerprint is SHA256:yMLGAtdE6S87XaMHtvFy41t1fH+QeBgchSTOmennwMQ.
Are you sure you want to continue connecting (yes/no)?
上面 yMLGAtdE6S87XaMHtvFy41t1fH+QeBgchSTOmennwMQ
就是服务器发给客户端的公钥(哈希值)。这个公钥会保存在本地。保存在:
$cd ~/.ssh/known_hosts
$ls
101.2.79.32 ssh-rsa AAAAB3MzaC1yc2EAAAADAQABAAABAQDAIDd6dG0LIL87woLOWGPiuO3cpBsxsH9VfTA7ETRf7X7Y9gf5Np5Qe02J7HworrX7nNH0Kq32ExRrQGUmdrP0iz0IAbfL7t8MxQb0fSj1uqnX0ZgY8E+EHkHXyyaR9bl0FQlf2G62BuaC+0ZceDtk7EkvXJdiA5dpt3gnlbsYYDWN4xGJItHlGI/Ni1e5bzLQgt4KTEPTl40EDr3Mc0VmXJyzCLpFu8/KzcLaftVkMZoZlrheH+iKlAIE3b7t2DECA/rJKc3SrVJ9kjjJ3LlQ+KQtUZF2utKHJtVke7iM+ZrVwwfnoBp2D1xPMbFClBlg6MMiQk+B1ylDmwqLSpmT
我们再看一下服务器的公钥,服务器的是保存在手机里面的。ssh 登录服务器,查看服务器公钥:
$ssh root@101.2.79.32
iPhone:~ root# cd /etc/ssh/
iPhone:/ect/ssh/ root# cat ssh_host_rsa_key.pub
ssh-rsa AAAAB3MzaC1yc2EAAAADAQABAAABAQDAIDd6dG0LIL87woLOWGPiuO3cpBsxsH9VfTA7ETRf7X7Y9gf5Np5Qe02J7HworrX7nNH0Kq32ExRrQGUmdrP0iz0IAbfL7t8MxQb0fSj1uqnX0ZgY8E+EHkHXyyaR9bl0FQlf2G62BuaC+0ZceDtk7EkvXJdiA5dpt3gnlbsYYDWN4xGJItHlGI/Ni1e5bzLQgt4KTEPTl40EDr3Mc0VmXJyzCLpFu8/KzcLaftVkMZoZlrheH+iKlAIE3b7t2DECA/rJKc3SrVJ9kjjJ3LlQ+KQtUZF2utKHJtVke7iM+ZrVwwfnoBp2D1xPMbFClBlg6MMiQk+B1ylDmwqLSpmT
第一次登录 ssh 服务器时,服务器会将自己的公钥发给客户端,客户端会把公钥保存在本地。并用人工方式比对一下客户端的公钥是否与服务器的公钥一致!等下次再登录时,会自动认证!
SSH使用公钥登录
除了使用密码登录,也可以免密码登录!免密码登录是不存大中间人攻击问题的,因为它是在登录成功之后才允许做的事情!
所谓的<q style="box-sizing: border-box;">公钥登录</q>,原理:
1.Mac 电脑将自己的公钥发给远程的手机
2.手机随机的生成一段字符串,发给Mac电脑
3.Mac 利用私钥加密字符串!
4.手机利用公钥解密字符串!
如果还要输入密码的话,设置文件的权限! chmod 755
在终端输入如下命令,生成 rsa 的公私钥:
$ssh-keygen
一路回车就可以,然后在
$cd ~/.ssh
目录底下可以看到生成的私钥id_rsa
和公钥id_rsa.pub
,直接在该目录下拷 贝公钥到服务器,用命令
$ssh-copy-id root@101.2.79.32
接着我们再次登录服务器
$ssh root@101.2.79.32
我们会欣喜的发现可以直接登录了,不需要再输入密码了。
登录服务器后,我们可以看一下 .ssh 目录底下
iPhone:~ root# cd ~/.ssh/
iPhone:~/.ssh root# ls
会发现有一个authorized_keys
文件。
我们用cat
命令查看一下这个文件,再退出进入
$cd ~/.ssh
查看一下id_rsa.pub
文件,会发现两者的公钥信息是一样的。
二、通过USB连接手机
SSH 的默认端口是 22
usbmuxd 在 iOS 和 Mac 上都是自带的!
除了上述 wifi 形式连接手机,我们还可以使用 usb 形式连接手机。与wifi 连接相比,usb连接的特点是:快且稳定。对于拷贝文件等需要稳定性的操作,可以使用 usb 连接。使用 usb 连接,我们需要做一个端口的映射。让我们本机电脑的一个端口映射到 22 端口上去。
主要分两步
- 通过 python 去监听端口
- 通过 ssh 去连接本机的服务器
详细过程
在终端执行命令
$python tcprelay.py -t 22:1122
//1122是随便写的一个本地没有占用的端口
此时本地的 1122 端口就会一直被监听,只要访问本地的 1122 端口,就会将数据发送到 ssh 连接的 22 端口上。这个时候,我们只需要执行命令
ssh -p 1122 root@127.0.0.1
//注:这里 127.0.0.1 也可以改为 localhost
就会映射到 usb 连接的手机上。
注意:这里 1122 端口是本机的,22 端口是 ssh 的
通过Shell脚本简化步骤
上面两步都是一些没有营养的步骤,我们可以通过 Shell 脚本简化。
- 将
python-client
文件夹拷贝到/Users/xipengfei/XPFShell/
目录下,然后新建一个 shell 脚本 usbConnect.sh,编写代码python /Users/xipengfei/XPFShell/python-client/tcprelay.py -t 22:1122
保存并退出。 - 新建一个 shell 脚本 usbLogin.sh,编写代码
ssh -p 1122 root@127.0.0.1
保存并退出。
这下,我们只需要在一个终端执行命令sh usbConnect.sh
监听端口,在另一个终端执行命令sh usbLogin.sh
连接服务器。
注:这里需要注意中间人攻击,同一个服务器(IP),不同的公钥就会出现中间人攻击
拷贝文件
把文件 123.txt 拷贝到服务器(手机)用户目录下,有两种方式:
-
wifi 拷贝
可以在任意目录下执行
scp 123.txt root@101.2.79.32:~/ -
usb 拷贝
先映射、监听服务器端口sh usbConnect.sh
,再执行
scp -P 1122 123.txt root@127.0.0.1:~/
//注:这里 127.0.0.1 也可以改为 localhost
应用瘦身
现在大多数应用都支持到 armv7s,有的甚至支持到 armv7(比如微信)。指令集可能会 armv7、armv7s、arm64,这样 mach-o 文件会比较大,导致 ipa 包很大。对于 iPhone5S 及以下的手机来说,只需要 arm64 指令集就够了,这个时候就有必要给应用瘦身。
- 通过USB连接手机,保证应用传输的时候快且稳定。
- 使用如下命令给应用瘦身
$ lipo mach-o文件 -thin armv64 -output macho_armv64
- 解压应用 ipa 包,把包内容里的 mach-o 文件替换为瘦身后的 mach-o 文件,注意名字改回原来的名字
- 使用如下命令打包 ipa 包
zip -ry xxx.ipa Payload
注:Payload 为要打包的文件夹 - 用 Xcode 的 Devices 安装瘦身后的应用
安装成功后,你会发现应用比瘦身之前少了将近一半的大小。对于非越狱手机需要做重签名的操作。