1.SSH是一種網絡協議,用於加密兩台計算機之間的通信 ; SSH的架構是服務器-客戶端模式,使用的是非對稱加密
非對稱加密:非對稱加密有兩個秘鑰,“公鑰”和“私鑰”
兩個秘鑰的特性:公鑰加密后的秘聞,只能通過對應的私鑰進行解密;而通過公鑰推理出私鑰的可能性微乎其微。私鑰是Server端獨有。
2.SSH整個過程

1)遠程Server收到用戶的登錄請求,把自己的公鑰發給用戶
2)用戶使用這個公鑰,將登錄密碼加密后,發送回來
3)遠程Server用自己的私鑰,解密登錄密碼,如果密碼正確,就同意用戶登錄
3.中間人攻擊
如果有一個攻擊者中途攔截用戶的登錄請求,向其發送自己的公鑰,用戶用攻擊者的公鑰進行數據加密。攻擊者接受到加密信息后再用自己的私鑰進行解密從而竊取用戶信息,這就是中間人攻擊
4.SSH解決中間人攻擊
1)口令認證
用戶會對自己的公鑰進行確認,如果是第一次登錄對方主機,會出現提示信息,按要求輸入密碼后就可以登錄了
2)公鑰認證(SSH提供的免去輸入密碼的登錄方式)

A.用戶將自己的公鑰放在遠程Server上,追加在文件authorized_keys中
B.Server端接收到用戶的連接請求后,會在authorized_keys中匹配用戶的公鑰,並生成隨機數R,用用戶的公鑰對該隨機數進行加密得到pubKey(R),將加密后的信息發送給用戶。
C.用戶通過私鑰進行解密得到隨機數R,然后對隨機數R和本次會話的SessionKey利用MD5生成摘要Digest1,發送給Server端
D.Server端會對R和SessionKey利用同樣的摘要算法生成Digest2
E.Server端會最后比較Digest1和Digest2是否相同,完成認證過程
5.SSH文件
1)id_rsa:保存私鑰
2)id_rsa.pub:保存公鑰
3)authorized_keys:保存已授權的客戶端公鑰
4)known_hosts:保存已認證的遠程主機host key
他們四個的關系如下(一台主機可能既是用戶也是Server,所以會同時擁有authorized_keys和known_hosts)

6.SSH端口轉發:本地轉發、遠程轉發、動態轉發
