什么是ssh
ssh是一個標準協(xié)議,用于保證網(wǎng)絡(luò)通信安全服務(wù),也就是加密,常見的應(yīng)用場景就是安全登錄,這個大家常用git的話應(yīng)該比較熟悉,配置ssh后就可以不需要密碼直接登錄了,非常方便,那么ssh是怎樣保證安全的呢。
ssh加密
加密是我們保證通信鏈路安全的最重要的方式,包括軍用情報的傳輸,全部是由復(fù)雜的加密算法加持的,就是為了保證只有對的人才能讀出正確的信息,林俊杰的歌詞完美的說明了這個問題
確認過眼神,我遇上對的人。
對稱加密

客戶端對稱加密過程

服務(wù)端對稱加密過程
對稱加密就是通信雙方使用同樣的密鑰來加密數(shù)據(jù),但是這樣一來風險就比較大,客戶端的數(shù)量都非常大,一旦任一客戶端的密鑰被泄露都會導(dǎo)致整個系統(tǒng)的數(shù)據(jù)傳輸被暴露,事情就大條了。那么解決這個問題的方式就是非對稱加密。
非對稱加密
非對稱加密使用一個公鑰和一個私鑰來加密和解密數(shù)據(jù),使用公鑰加密的數(shù)據(jù)只能用對應(yīng)的私鑰解密,而且只有公鑰是無法計算或者猜測出私鑰的。

以一次登錄為例,非對稱加密的基本流程如下,
0、客戶端發(fā)起明文登錄請求
1、服務(wù)端將公鑰發(fā)送給客戶端
2、客戶端使用公鑰加密登錄的賬號密碼等敏感數(shù)據(jù)
3、加密后的數(shù)據(jù)發(fā)送給服務(wù)端
4、服務(wù)端獲取數(shù)據(jù)后,使用對應(yīng)的私鑰解密
5、校驗數(shù)據(jù)合法性
6、返回登錄結(jié)果
看起來很完美,萬無一失?NO!NO!NO!
中間人攻擊
設(shè)想一下如下場景,有黑客大神搭建了一個假冒的服務(wù)器,攔截了你的明文請求,然后把自己的公鑰發(fā)送給你,你傻乎乎的使用了這個公鑰,然后把加密后的數(shù)據(jù)發(fā)送給了假冒的服務(wù)器,假冒的服務(wù)器下一步的動作當然是毫不客氣的使用私鑰解密你的數(shù)據(jù),然后獲取到了你的明文密碼,換句話說,你的賬號被盜了!

中間人攻擊示意
如何防范中間人攻擊呢?這就需要基于口令的認證,SSH的公鑰和私鑰都是自己生成的,沒法公證。只能通過客戶端自己對公鑰進行確認。通常在第一次登錄的時候,系統(tǒng)會出現(xiàn)下面提示信息
The authenticity of host 'ssh-server.example.com (12.18.429.21)' can't be established.
RSA key fingerprint is 98:2e:d7:e0:de:9f:ac:67:28:c2:42:2d:37:16:58:4d.
Are you sure you want to continue connecting (yes/no)?
需要我們自行確認服務(wù)端的RSA指紋,輸入yes后提示
Warning: Permanently added 'ssh-server.example.com,12.18.429.21' (RSA) to the list of known hosts.
Password: (enter password)
接下來就是按照我們上述的流程走了。