Open Secure Shell(OpenSSH)是一個(gè)安全的登錄系統(tǒng)莺丑,可以用來替代telnet仆救、rlogin、rcp等抱冷。簡單的講崔列,ssh 是一個(gè)通過網(wǎng)絡(luò)登錄進(jìn)入另一臺(tái)計(jì)算機(jī)的程序梢褐。openSSH 是其中的一種軟件。我們可以利用電腦通過 OpenSSH 軟件赵讯,遠(yuǎn)程登錄到我們的手機(jī)盈咳。
一、通過openSSH連接(登錄)手機(jī)(wifi連接)
$ssh 用戶名@用戶服務(wù)器地址
//注:這里的服務(wù)器指手機(jī)(下同)
iOS 下有兩個(gè)用戶
- root(最高權(quán)限)用戶 $HOME:/var/root
iPhone:~ root#
- 還有一個(gè) mobile(普通)用戶 $HOME: /var/mobile
iPhone:~ mobile$
mobile 不能操作系統(tǒng)級(jí)別的文件
刪除SSH服務(wù)器對(duì)應(yīng)的公鑰
$ssh-keygen -R 服務(wù)器IP地址
修改ssh登錄密碼
- passwd 輸入兩次新密碼
關(guān)閉openSSH連接
$exit
SSH
SSH是一種網(wǎng)絡(luò)協(xié)議.用于計(jì)算機(jī)之間的加密登錄!
openSSH 是其中的一種軟件.
SSH通訊過程
中間人攻擊(Man-in-the-MiddleAttack边翼,簡稱“MITM攻擊”)
如果登錄同一個(gè)服務(wù)器(IP)鱼响,它的公鑰(哈希值)發(fā)生了變化,它就不會(huì)讓你登錄了组底,它會(huì)判斷有中間人攻擊丈积。本地一個(gè)IP:端口只能保存一個(gè)公鑰。
預(yù)防中間人攻擊最有效的方法就是驗(yàn)證【公鑰是不是服務(wù)器的】!!
如果是公開的 SSH 服務(wù)器债鸡,一般會(huì)將公鑰的哈希值【公布在網(wǎng)站上】!!
我們?cè)诮K端第一次連接 SSH 服務(wù)器時(shí)江滨,會(huì)提示:
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
就是服務(wù)器發(fā)給客戶端的公鑰(哈希值)。這個(gè)公鑰會(huì)保存在本地厌均。保存在:
$cd ~/.ssh/known_hosts
$ls
101.2.79.32 ssh-rsa AAAAB3MzaC1yc2EAAAADAQABAAABAQDAIDd6dG0LIL87woLOWGPiuO3cpBsxsH9VfTA7ETRf7X7Y9gf5Np5Qe02J7HworrX7nNH0Kq32ExRrQGUmdrP0iz0IAbfL7t8MxQb0fSj1uqnX0ZgY8E+EHkHXyyaR9bl0FQlf2G62BuaC+0ZceDtk7EkvXJdiA5dpt3gnlbsYYDWN4xGJItHlGI/Ni1e5bzLQgt4KTEPTl40EDr3Mc0VmXJyzCLpFu8/KzcLaftVkMZoZlrheH+iKlAIE3b7t2DECA/rJKc3SrVJ9kjjJ3LlQ+KQtUZF2utKHJtVke7iM+ZrVwwfnoBp2D1xPMbFClBlg6MMiQk+B1ylDmwqLSpmT
我們?cè)倏匆幌路?wù)器的公鑰唬滑,服務(wù)器的是保存在手機(jī)里面的。ssh 登錄服務(wù)器棺弊,查看服務(wù)器公鑰:
$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 服務(wù)器時(shí)晶密,服務(wù)器會(huì)將自己的公鑰發(fā)給客戶端,客戶端會(huì)把公鑰保存在本地模她。并用人工方式比對(duì)一下客戶端的公鑰是否與服務(wù)器的公鑰一致稻艰!等下次再登錄時(shí),會(huì)自動(dòng)認(rèn)證侈净!
SSH使用公鑰登錄
除了使用密碼登錄尊勿,也可以免密碼登錄归苍!免密碼登錄是不存大中間人攻擊問題的,因?yàn)樗窃诘卿洺晒χ蟛旁试S做的事情运怖!
所謂的<q style="box-sizing: border-box;">公鑰登錄</q>,原理:
1.Mac 電腦將自己的公鑰發(fā)給遠(yuǎn)程的手機(jī)
2.手機(jī)隨機(jī)的生成一段字符串拼弃,發(fā)給Mac電腦
3.Mac 利用私鑰加密字符串!
4.手機(jī)利用公鑰解密字符串!
如果還要輸入密碼的話,設(shè)置文件的權(quán)限! chmod 755
在終端輸入如下命令,生成 rsa 的公私鑰:
$ssh-keygen
一路回車就可以摇展,然后在
$cd ~/.ssh
目錄底下可以看到生成的私鑰id_rsa
和公鑰id_rsa.pub
吻氧,直接在該目錄下拷 貝公鑰到服務(wù)器,用命令
$ssh-copy-id root@101.2.79.32
接著我們?cè)俅蔚卿浄?wù)器
$ssh root@101.2.79.32
我們會(huì)欣喜的發(fā)現(xiàn)可以直接登錄了咏连,不需要再輸入密碼了盯孙。
登錄服務(wù)器后,我們可以看一下 .ssh 目錄底下
iPhone:~ root# cd ~/.ssh/
iPhone:~/.ssh root# ls
會(huì)發(fā)現(xiàn)有一個(gè)authorized_keys
文件祟滴。
我們用cat
命令查看一下這個(gè)文件振惰,再退出進(jìn)入
$cd ~/.ssh
查看一下id_rsa.pub
文件,會(huì)發(fā)現(xiàn)兩者的公鑰信息是一樣的垄懂。
二骑晶、通過USB連接手機(jī)
SSH 的默認(rèn)端口是 22
usbmuxd 在 iOS 和 Mac 上都是自帶的!
除了上述 wifi 形式連接手機(jī),我們還可以使用 usb 形式連接手機(jī)草慧。與wifi 連接相比桶蛔,usb連接的特點(diǎn)是:快且穩(wěn)定。對(duì)于拷貝文件等需要穩(wěn)定性的操作漫谷,可以使用 usb 連接仔雷。使用 usb 連接,我們需要做一個(gè)端口的映射舔示。讓我們本機(jī)電腦的一個(gè)端口映射到 22 端口上去碟婆。
主要分兩步
- 通過 python 去監(jiān)聽端口
- 通過 ssh 去連接本機(jī)的服務(wù)器
詳細(xì)過程
在終端執(zhí)行命令
$python tcprelay.py -t 22:1122
//1122是隨便寫的一個(gè)本地沒有占用的端口
此時(shí)本地的 1122 端口就會(huì)一直被監(jiān)聽,只要訪問本地的 1122 端口惕稻,就會(huì)將數(shù)據(jù)發(fā)送到 ssh 連接的 22 端口上竖共。這個(gè)時(shí)候,我們只需要執(zhí)行命令
ssh -p 1122 root@127.0.0.1
//注:這里 127.0.0.1 也可以改為 localhost
就會(huì)映射到 usb 連接的手機(jī)上缩宜。
注意:這里 1122 端口是本機(jī)的肘迎,22 端口是 ssh 的
通過Shell腳本簡化步驟
上面兩步都是一些沒有營養(yǎng)的步驟,我們可以通過 Shell 腳本簡化锻煌。
- 將
python-client
文件夾拷貝到/Users/xipengfei/XPFShell/
目錄下妓布,然后新建一個(gè) shell 腳本 usbConnect.sh,編寫代碼python /Users/xipengfei/XPFShell/python-client/tcprelay.py -t 22:1122
保存并退出宋梧。 - 新建一個(gè) shell 腳本 usbLogin.sh匣沼,編寫代碼
ssh -p 1122 root@127.0.0.1
保存并退出。
這下捂龄,我們只需要在一個(gè)終端執(zhí)行命令sh usbConnect.sh
監(jiān)聽端口释涛,在另一個(gè)終端執(zhí)行命令sh usbLogin.sh
連接服務(wù)器加叁。
注:這里需要注意中間人攻擊,同一個(gè)服務(wù)器(IP)唇撬,不同的公鑰就會(huì)出現(xiàn)中間人攻擊
拷貝文件
把文件 123.txt 拷貝到服務(wù)器(手機(jī))用戶目錄下它匕,有兩種方式:
-
wifi 拷貝
可以在任意目錄下執(zhí)行
scp 123.txt root@101.2.79.32:~/ -
usb 拷貝
先映射、監(jiān)聽服務(wù)器端口sh usbConnect.sh
窖认,再執(zhí)行
scp -P 1122 123.txt root@127.0.0.1:~/
//注:這里 127.0.0.1 也可以改為 localhost
應(yīng)用瘦身
現(xiàn)在大多數(shù)應(yīng)用都支持到 armv7s豫柬,有的甚至支持到 armv7(比如微信)。指令集可能會(huì) armv7扑浸、armv7s烧给、arm64,這樣 mach-o 文件會(huì)比較大喝噪,導(dǎo)致 ipa 包很大础嫡。對(duì)于 iPhone5S 及以下的手機(jī)來說,只需要 arm64 指令集就夠了酝惧,這個(gè)時(shí)候就有必要給應(yīng)用瘦身榴鼎。
- 通過USB連接手機(jī),保證應(yīng)用傳輸?shù)臅r(shí)候快且穩(wěn)定系奉。
- 使用如下命令給應(yīng)用瘦身
$ lipo mach-o文件 -thin armv64 -output macho_armv64
- 解壓應(yīng)用 ipa 包檬贰,把包內(nèi)容里的 mach-o 文件替換為瘦身后的 mach-o 文件,注意名字改回原來的名字
- 使用如下命令打包 ipa 包
zip -ry xxx.ipa Payload
注:Payload 為要打包的文件夾 - 用 Xcode 的 Devices 安裝瘦身后的應(yīng)用
安裝成功后缺亮,你會(huì)發(fā)現(xiàn)應(yīng)用比瘦身之前少了將近一半的大小。對(duì)于非越獄手機(jī)需要做重簽名的操作桥言。