SSH是一種加密的網絡傳輸協議,可在不安全的網絡中為網絡服務提供安全的傳輸環境。SSH通過在網絡中創建安全隧道來實現SSH客戶端與服務器之間的連接。雖然任何網絡服務都可以通過SSH實現安全傳輸,SSH最常見的用途是遠程登錄系統,人們通常利用SSH來傳輸命令行界面和遠程執行命令。
SSH以非對稱加密方式實現身份驗證,主要有以下兩種:
-
基於密碼的安全驗證
-
基於密鑰的安全驗證
1.基於密碼的安全驗證
是使用自動生成的公鑰-私鑰對來簡單地加密網絡連接,隨后使用密碼認證進行登錄,如圖所示。
身份認證通過,然后是交換會話密鑰(對稱加密),使用會話密鑰對之后傳遞的數據進行加密,即傳輸數據加密,過程如下。注:使用對稱加密效率高。
客戶端生成會話數據加密 sess_key,使用服務端公鑰 ser_rsa.pub 加密后傳輸給服務器(會話密鑰),
服務器獲取到后使用私鑰 ser_rsa 解密,得到sess_key,
客戶端和服務器通過 sess_key 進行會話數據安全傳輸,
即客戶端和服務器用sess_key 分別對傳輸數據進行加密和解密。
但是,這種認證方式無法避免“中間人”攻擊,可能會有別的服務器在冒充真正的服務器。
2.基於密鑰的安全驗證
客戶端生成一對公鑰和私鑰,並將自己的公鑰發送到服務器上,認證過程不需要輸入密碼,避免“中間人”的攻擊,如圖所示。
認證成功后,使用對稱加密的方式傳輸數據。
風險點:在第一次將客戶端公鑰發送到服務器這一步,還是有可能受到“中間人”的攻擊,如果首次連接沒有中間人,之后的連接就無需擔心中間人,因為中間人給出的公鑰和服務端給出的公鑰相同的可能性可以忽略。