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 安裝瘦身后的應用
安裝成功后,你會發現應用比瘦身之前少了將近一半的大小。對于非越獄手機需要做重簽名的操作。