一、WIFI連接登錄:Mac(客戶(hù)端)登錄到iPhone(服務(wù)器)
為什么要Mac端要遠(yuǎn)程登錄到iPhone端?——這樣就可以在Mac的終端上,通過(guò)敲一些命令行來(lái)作用于iPhone端、操縱iPhone端。
為什么iOS支持終端命令操作?——因?yàn)閕OS和Mac OS X都是基于Darwin(蘋(píng)果的一個(gè)基于Unix的開(kāi)源系統(tǒng)內(nèi)核)。
登錄步驟:
1、iPhone端在cydia上安裝個(gè)OpenSSH,便于使用OpenSSH遠(yuǎn)程登錄。
2、Mac和iPhone處于同一WIFI下;
3、Mac端登錄命令ssh root@10.16.28.48,解釋?zhuān)篬ssh用該遠(yuǎn)程登錄保護(hù)方式] [root:賬戶(hù)名,iOS下的賬號(hào)之一] @ [10.16.28.48 是手機(jī)端服務(wù)器連接wifi的ip地址]
4、Mac端提示輸入密碼:alpine 【這是cydia上OpenSSH這個(gè)插件的作者規(guī)定的初始密碼】
5、成功登錄到iPhone服務(wù)器;
6、可以使用Mac端的終端操控iPhone了。。。。。。。。
7、退出登錄命令:exit

了解一些概念:
> iOS下的2個(gè)常用賬戶(hù):root、mobile
root:最高權(quán)限賬戶(hù),$HOME是/var/root
mobile:普通權(quán)限賬戶(hù),只能操作一些普通文件,不能操作系統(tǒng)級(jí)別的文件,$HOME是/var/mobile,登錄方式與root幾乎相同root mobile@服務(wù)器主機(jī)地址
> 修改賬戶(hù)密碼:
修改root賬戶(hù):passwd
修改mobile賬戶(hù):passwd mobile

> 搞清楚SSH、OpenSSH、SSL、OpenSSL
- SSL:(一種加密)Secure Sockets Layer的縮寫(xiě),是為網(wǎng)絡(luò)通信提供安全及數(shù)據(jù)完整性的一種安全協(xié)議,在傳輸層對(duì)網(wǎng)絡(luò)連接進(jìn)行加密;
- OpenSSL:(一種加密,開(kāi)源不要錢(qián))SSL的開(kāi)源實(shí)現(xiàn),絕大部分HTTPS請(qǐng)求等價(jià)于:HTTP + OpenSSL;OpenSSH的加密就是通過(guò)OpenSSL完成的;
- SSH:Secure Shell的縮寫(xiě),意為“安全外殼協(xié)議”,是一種可以為
遠(yuǎn)程登錄提供安全保障的協(xié)議;使用SSH,可以把所有傳輸?shù)臄?shù)據(jù)進(jìn)行加密,“中間人”攻擊方式就不可能實(shí)現(xiàn),能防止DNS欺騙和IP欺騙; - OpenSSH:(不要錢(qián))是SSH協(xié)議的免費(fèi)開(kāi)源實(shí)現(xiàn),可以通過(guò)OpenSSH的方式讓Mac遠(yuǎn)程登錄到iPhone;


> SSH的版本
SSH協(xié)議一共2個(gè)版本:SSH-1、SSH-2,現(xiàn)在用的比較多的是SSH-2,客戶(hù)端和服務(wù)端版本要保持一致才能通信。
查看SSH版本,通過(guò)查看配置文件中的Protocol字段,查看命令:
客戶(hù)端:cat /etc/ssh/ssh_config
服務(wù)端:cat /etc/ssh/sshd_config
> SSH的通信過(guò)程
可以分為3大主要階段:
1、建立安全連接、2、客戶(hù)端認(rèn)證、3、數(shù)據(jù)傳輸。
1、建立安全連接
1.1 在建立安全連接過(guò)程中,服務(wù)器會(huì)提供自己的身份證明;

左邊的客戶(hù)端中的known_hosts文件就是存放一些公鑰信息:

查看known_hosts:cat known_hosts,192.168.123.71對(duì)應(yīng)的就是iPhone服務(wù)端發(fā)過(guò)來(lái)的公鑰:

如何驗(yàn)證客戶(hù)端中known_hosts文件中192.168.123.71對(duì)應(yīng)的公鑰信息就是iPhone服務(wù)端的公鑰?
——打開(kāi)服務(wù)端的公鑰,對(duì)比下是否一致,即可知道。
連接到服務(wù)器 ssh root@192.168.123.71,來(lái)到服務(wù)器的配置文件夾cd /etc/ssh,查看其中服務(wù)器公鑰ssh_host_rsa_key.pub,對(duì)比上面客戶(hù)端(Mac)known_hosts文件中192.168.123.71對(duì)應(yīng)的內(nèi)容,會(huì)發(fā)現(xiàn)是一致的。

1.2 如果客戶(hù)端(Mac)并無(wú)服務(wù)器端(iPhone)的公鑰信息,就會(huì)詢(xún)問(wèn)是否連接此服務(wù)器,連接后下次就不會(huì)再詢(xún)問(wèn),因?yàn)橐呀?jīng)保存了iPhone端的公鑰,除非把公鑰刪掉;

1.3 在建立安全連接過(guò)程中,如果服務(wù)端的公鑰和客戶(hù)端存儲(chǔ)的公鑰不一致,會(huì)提示以下錯(cuò)誤信息:提醒服務(wù)器的身份信息發(fā)生了變更(遠(yuǎn)程連接發(fā)生了改變,可能遭遇中間人攻擊)

也可能是這種原因:
公司換了臺(tái)電腦,上面的ip地址設(shè)置的一樣,這種情況并不是遭到攻擊。電腦還是會(huì)把根據(jù)公鑰生成的指紋信息發(fā)送過(guò)來(lái),如果確實(shí)是公司的那臺(tái)電腦的指紋信息,那還是要連接。
但是一旦顯示這個(gè)界面,是會(huì)連接失敗的,怎么辦?——?jiǎng)h掉之前的公鑰信息。
刪除公鑰方法一:用vim刪除對(duì)應(yīng)的host公鑰:vim ~/.ssh/known_hosts
1、cd ~/.ssh
2、vim know_hosts
3、讓光標(biāo)停留在192.168.123.71行,按 d 即可刪除
4、保存推出;
5、再次進(jìn)行連接服務(wù)器ssh root@192.168.123.71;
6、重新提示要不要連接

刪除公鑰方法二:ssh-keygen -R 服務(wù)器IP地址

建立安全連接,不只是公鑰信息的驗(yàn)證,還要做很多事,比如要確定會(huì)話(huà)密鑰。。。等等
2、客戶(hù)端認(rèn)證
第一步已經(jīng)確認(rèn)了要連接,但是客戶(hù)端的密碼還不知道對(duì)不對(duì)??蛻?hù)端是如何認(rèn)證呢?
SSH-2提供了2種常用的客戶(hù)端認(rèn)證方式
1、基于密碼的客戶(hù)端認(rèn)證:使用賬號(hào)和密碼即可認(rèn)證;
2、基于密鑰的客戶(hù)端認(rèn)證:免密碼認(rèn)證,最安全的一種認(rèn)證方式。
SSH-2默認(rèn)會(huì)優(yōu)先嘗試“密鑰認(rèn)證”,如果認(rèn)證失敗,才會(huì)嘗試“密碼認(rèn)證”。
如何搭建基于密鑰的客戶(hù)端認(rèn)證?

- 在客戶(hù)端要生成配對(duì)的公鑰文件和私鑰文件。
【見(jiàn)圖:客戶(hù)端生成公私鑰操作步驟】 - 在服務(wù)器端會(huì)有個(gè)授權(quán)文件。
- 客戶(hù)端將公鑰內(nèi)容放到服務(wù)端的授權(quán)文件尾部。
【見(jiàn)圖:公鑰內(nèi)容追加到服務(wù)端授權(quán)文件尾部】 - 登錄,驗(yàn)證免密碼認(rèn)證是否完成,由它自己完成,自己會(huì)用到私鑰。。。。






嘗試登錄,看是否免密碼:

還是需要密碼,免密驗(yàn)證失敗,ssh-keygen、ssh-copy-id root@服務(wù)器主機(jī)地址,這兩個(gè)智能指令生成密鑰文件并且追加到服務(wù)端授權(quán)文件尾部的操作,沒(méi)能幫到我,還沒(méi)搞清楚原因。(原因后面有說(shuō)到,是文件權(quán)限的問(wèn)題)
除開(kāi)用智能指令,還可以手動(dòng)操作來(lái)把公鑰內(nèi)容追加到授權(quán)文件尾部。
1、公鑰文件拷貝到服務(wù)端;
2、再把內(nèi)容追加到授權(quán)文件尾部;
操作步驟:
1、先刪掉服務(wù)端的授權(quán)文件authorized_keys;
2、進(jìn)入客戶(hù)端.ssh文件夾;
3、scp ~/.ssh/id_rsa.pub root@192.168.123.71:~/.ssh,scp:遠(yuǎn)程拷貝;
4、登錄到服務(wù)端進(jìn)入.ssh文件夾,把id_rsa.pub的內(nèi)容追加到authorized_keys的尾部:cat id_rsa.pub >> authorized_keys,如果沒(méi)有authorized_keys就會(huì)新建一個(gè),此時(shí)authorized_keys文件的內(nèi)容和id_rsa.pub就是一樣了;
5、rm id_rsa.pub;
6、嘗試登錄ssh root@192.168.123.71,看是否需要密碼,我的結(jié)果還需要密碼?。。。。。ê竺嬗姓f(shuō)到是文件夾權(quán)限問(wèn)題)
解決配置完免密認(rèn)證后,登錄還需要輸入密碼的問(wèn)題。
存在這個(gè)問(wèn)題是因?yàn)槲募A沒(méi)有權(quán)限。
所以在服務(wù)端,還需要配置權(quán)限:
chmod 755 ~
chmod 755 ~/.ssh
chmod 644 ~/.ssh/authorized_keys


結(jié)果還要密碼:alpine,只是提示輸密碼不一樣了。

方法一:上網(wǎng)查找的解決辦法:網(wǎng)址
Mac本地執(zhí)行命令:
eval `ssh-agent`
ssh-add
ssh-agent:是用于管理密鑰;
ssh-add:用于將密鑰加入到ssh-agent中;
SSH可以和ssh-agent通信獲取密鑰,這樣就不需要用戶(hù)手工輸入密碼了。 但這個(gè)配置只對(duì)當(dāng)前會(huì)話(huà)生效,會(huì)話(huà)關(guān)閉或機(jī)器重啟后都需要重新執(zhí)行這兩條命令。將命令放到~/.bash_profile中,就可以免去每次輸入的麻煩。

到這里為止,可以成功的免密登錄了。但是退出終端,還是要輸入密碼。
方法二:
ssh-add -K ~/.ssh/id_rsa
退出終端,依然不用輸入密碼,
但如果重啟電腦,上面的指令還需執(zhí)行一次。
方法三:(完美)
結(jié)合方法一和方法二,把ssh-add -K ~/.ssh/id_rsa這條指令放在~/.bash_profile中,這樣每次重啟電腦都會(huì)執(zhí)行該指令。已驗(yàn)證重啟終端或電腦都無(wú)需再輸入密碼。
參考:
1、mac配置完ssh依然提示"Enter passphrase for key"解決方法
2、mac:ssh登陸總是需要輸入鑰匙串密碼解決
> 22端口介紹
端口就是設(shè)備對(duì)外提供服務(wù)的窗口,每個(gè)端口都有個(gè)端口號(hào)(范圍是0~65535,共2^16個(gè))。
有些端口號(hào)是保留的,已經(jīng)規(guī)定了用途,比如:
21端口提供FTP服務(wù);
80端口提供HTTP服務(wù);
22端口提供SSH服務(wù)(可以查看/etc/ssh/sshd_config的Port字段);
更多保留端口號(hào): https://baike.baidu.com/item/%E7%AB%AF%E5%8F%A3%E5%8F%B7/10883658#4_3
iPhone默認(rèn)是使用22端口進(jìn)行SSH通信,采用的是TCP協(xié)議。

3、數(shù)據(jù)傳輸
二、USB連接登錄:Mac(客戶(hù)端)登錄到iPhone(服務(wù)器)
為什么要用USB連接?
- 為了加快傳輸速度,也可以通過(guò)USB連接的方式進(jìn)行SSH登錄;
為什么Mac可以通過(guò)USB傳數(shù)據(jù)?
- Mac上有個(gè)服務(wù)程序usbmuxd(它會(huì)開(kāi)機(jī)自動(dòng)啟動(dòng)),可以將Mac的數(shù)據(jù)通過(guò)USB傳輸?shù)絠Phone;
- /System/Library/PrivateFrameworks/MobileDevice.framework/Resources/usbmuxd

0、準(zhǔn)備兩個(gè)文件:tcprelay.py、usbmux.py。
——即usbmuxd工具包(下載v1.0.8版本,主要用到里面的一個(gè)python腳本:tcprelay.py)
1、映射端口,10010端口映射到22端口,命令行:python /Users/fengXXX/Desktop/usbmuxd/tcprelay.py -t 22:10010
格式解釋: python [文件路徑] [-t:為了能夠同時(shí)支持多個(gè)SSH連接] [SSH端口] : [客戶(hù)端Mac端口,找個(gè)沒(méi)被用的就行,如果被用了,則映射不成功,見(jiàn)圖:端口被占用.png]


已經(jīng)連成功的這個(gè)窗口留著,保留窗口映射狀態(tài),再新建個(gè)終端窗口。
2、登錄到本機(jī)root賬號(hào)下的10010端口:
ssh -p 10010 root@localhost
或ssh root@127.0.0.1 -p 10010
localhost是一個(gè)域名,指向的IP地址是127.0.0.1,本機(jī)虛擬網(wǎng)卡的IP地址

登錄的時(shí)候我還沒(méi)做免密操作,所以還需要輸入密碼:alpine。
usbmuxd會(huì)將Mac本地10010端口的TCP協(xié)議數(shù)據(jù),通過(guò)USB連接轉(zhuǎn)發(fā)到iPhone的22端口
> 3、通過(guò)USB遠(yuǎn)程拷貝
- 遠(yuǎn)程拷貝文件也可以直接跟Mac本地的10010端口通信
-
scp -P 10010 ~/Desktop/1.txt root@localhost:~/test(在Mac端操作) - 將Mac上的~/Desktop/1.txt文件,拷貝到iPhone上的~/test路徑
- 注意:scp的端口號(hào)參數(shù)是大寫(xiě)的-P
注意:這里雖然是通過(guò)USB傳東西,這里的登錄還是SSH登錄,服務(wù)端認(rèn)證、客戶(hù)端認(rèn)證、安全傳輸,其實(shí)一直都在的。只是數(shù)據(jù)先發(fā)到10010端口,然后再發(fā)到22端口,有這么個(gè)轉(zhuǎn)發(fā)的過(guò)程而已,只是換了一種傳遞數(shù)據(jù)的方式而已。加密的過(guò)程如公鑰私鑰都還在的,之前的途徑是WIFI,現(xiàn)在是USB。
sh
如上,每次都要做兩步操作:
1、端口映射,
2、登錄到本機(jī)的10010端口
優(yōu)化:將經(jīng)常執(zhí)行的一系列終端命令行放到sh腳本文件中(shell)。
操作
用vim新建sh文件:
vim usb.sh 【這樣寫(xiě)是把usb.sh放在根目錄,文件中的是端口映射的內(nèi)容】
鍵入內(nèi)容:python 路徑 -t 22:mac端口

esc鍵——>shift+:——>wq
在這個(gè)位置:

如何查看那一串命令:
cat usb.sh
如何執(zhí)行腳本呢?
有三種方式:sh、bash、source。

這些都是linux的知識(shí)了。
三種方式有什么區(qū)別呢?
- sh、bash:shell環(huán)境會(huì)啟動(dòng)一個(gè)
子進(jìn)程來(lái)執(zhí)行腳本,執(zhí)行完后,再回到父進(jìn)程的shell環(huán)境。 - source:在
當(dāng)前shell環(huán)境下執(zhí)行腳本;source也可以用.來(lái)表示。


下面再來(lái)新建第二個(gè)sh文件,登錄的sh文件:
vim login.sh
鍵入內(nèi)容ssh -p 10010 root@localhost
cat login.sh ,查看腳本內(nèi)容。
sh login.sh,執(zhí)行腳本內(nèi)容。
為什么兩個(gè)腳本不能弄成一個(gè)呢?

因?yàn)閳?zhí)行完端口映射后,就會(huì)一直卡在那里,不會(huì)執(zhí)行下一行命令了。按control+c終止連接之后,才執(zhí)行第二行登錄命令。
有個(gè)問(wèn)題,iPhone終端不能輸入中文

解決辦法:
1、iPhone終端沒(méi)有vim,先在cydia中下載安裝個(gè)Vi IMproved,方便在終端中使用vim新建文件。(注意,iPhone端本來(lái)是沒(méi)有vim的,因?yàn)樵姜z才能安裝上)
2、在iPhone端的~文件夾下vim新建.inputrc文件,并輸入
set convert-meta off
set output-meta on
set meta-flag on
set input-meta on
這些內(nèi)容,保存。
3、驗(yàn)證:在iPhone端vim新建一個(gè)中文名的txt:哈哈.txt,發(fā)現(xiàn)可以用中文名了。


但是命令行工具上文件名是?亂符號(hào)這個(gè)還沒(méi)解決掉,可能是越獄的關(guān)系,本來(lái)iPhone上是沒(méi)vim的。但是iPhone上的文件名可以顯示中文。