SSH全稱是Secure Shell,SSH協議是基於應用層的協議,為遠程登錄會話和其他網絡服務提供安全性的協議。
SSH使用最多的是遠程登錄和傳輸文件,實現此功能的傳統協議都不安全(ftp,telnet等),因為它們使用明文傳輸數據。而SSH在傳輸過程中的數據是加密的,安全性更高。
工作原理
SSH協議是基於非對稱加密方法的,服務器和客戶端都會生成自己的公鑰和私鑰。
(1) 服務器建立公鑰。若遠程服務器是新系統,會在/etc/ssh目錄下生成一個名為ssh_host_ecdsa_key.pub的公鑰,同時生成一個名為ssh_host_ecdsa_key的私鑰,這一對就是遠程服務器的公鑰與私鑰。之后每回啟動sshd服務的時候,系統會自動在此路徑下查找公鑰。
遠程服務器的公鑰:
(2) 客戶端請求連接。linux或者mac系統可以直接通過自帶的shell連接,指令為ssh user@host,如果客戶端和服務器是相同的用戶,則可以省去user,直接使用ssh host。
(3) 服務器發送公鑰給客戶端。服務器接到請求后,把公鑰傳給客戶端使用。
(4) 客戶端記錄服務器公鑰並計算自己的公私鑰。客戶端將服務器傳來的公鑰記錄在~/.ssh/known_hosts中,若是已經記錄有該服務器公鑰,則比對是否一致,一致后就計算客戶端自己的公私鑰。
客戶端保存的服務器公鑰:
(5) 客戶端發送自己的公鑰給服務器。客戶端將自己的公鑰發送給服務器,這樣服務器端就有客戶端公鑰+服務器自己私鑰,客戶端就有服務器公鑰+客戶端自己私鑰,組成了非對稱加密系統。
(6) 開始雙向加解密。服務器發送數據:用客戶端公鑰加密,客戶端收到數據后用自己私鑰解密。客戶端發送數據:用服務器公鑰加密,服務器收到數據后用自己私鑰解密。
工作過程
(1) 版本號協商階段,SSH目前包括 SSH1和SSH2兩個版本, 雙方通過版本協商確定使用的版本
(2) 密鑰和算法協商階段,SSH支持多種加密算法, 雙方根據本端和對端支持的算法,協商出最終使用的算法
(3) 認證階段,SSH客戶端向服務器端發起認證請求, 服務器端對客戶端進行認證
(4) 會話請求階段, 認證通過后,客戶端向服務器端發送會話請求
(5) 交互會話階段 ,會話請求通過后,服務器端和客戶端進行信息的交互
認證方式
認證方式主要有兩種:密碼認證和公鑰認證。
密碼認證:輸入賬號密碼進行認證。
公鑰認證:需要客戶端生成一對公私鑰,使用ssh-keygen生成,保存在~/.ssh路徑下,然后使用指令ssh-copy-id user@host傳到服務器端,以后再登錄認證的時候,客戶端自動發送公鑰給服務器,服務對比一致則通過認證,不要繁瑣地輸入密碼了。
客戶端生成的登錄公鑰:
服務器端接收的客戶端登錄公鑰:
這一篇文章主要記錄ssh協議的工作原理及過程,接下來還會寫一篇ssh協議涉及的安全威脅及解決辦法。
歡迎關注微信公眾號:shoshana