SSH
一、定義
(Secure Shell,安全外殼)是一種網絡安全協議,通過加密和認證機制實現安全的訪問和文件傳輸等業務。SSH協議通過對網絡數據進行加密和驗證,在不安全的網絡環境中提供了安全的登錄和其他安全網絡服務。作為Telnet和其他不安全遠程shell協議的安全替代方案,目前SSH協議已經被全世界廣泛使用,大多數設備都支持SSH功能。
二、SSH端口號
當SSH應用於Stelnet,Sftp以及SCP時,使用的默認SSH端口都是22,當SSH應用於NETCONF時,可以指定SSH端口是22或者830,SSH端口支持修改,更改后當前所有的連接都會斷開,SSH服務器開始偵聽新的端口。
三、SSH的工作原理
SSH由服務器和客戶端組成,在整個通信過程中,為建立安全的SSH通道,會經歷如下幾個階段:
- 連接建立
SSH服務器在指定的端口偵聽客戶端的連接請求,在客戶端向服務器發起連接請求后,雙方建立一個TCP連接。
- 版本協商
SSH協議目前存在SSH1.X(SSH2.0之前的版本)和SSH2.0版本。SSH2.0協議相比SSH1.X協議來說,在結構上做了擴展,可以支持更多的認證方法和密鑰交換方法,同時提高了服務能力。SSH服務器和客戶端通過協商確定最終使用的SSH版本號。
- 算法協商
SSH支持多種加密算法,雙方根據各自支持的算法,協商出最終用於產生會話密鑰的密鑰交換算法、用於數據信息加密的加密算法、用於進行數字簽名和認證的公鑰算法以及用於數據完整性保護的HMAC算法。
- 密鑰交換
服務器和客戶端通過密鑰交換算法,動態生成共享的會話密鑰和會話ID,建立加密通道。會話密鑰主要用於后續數據傳輸的加密,會話ID用於在認證過程中標識該SSH連接。
- 用戶認證
SSH客戶端向服務器端發起認證請求,服務器端對客戶端進行認證。SSH支持以下幾種認證方式:
- 密碼(password)認證:客戶端通過用戶名和密碼的方式進行認證,將加密后的用戶名和密碼發送給服務器,服務器解密后與本地保存的用戶名和密碼進行對比,並向客戶端返回認證成功或失敗的消息。
- 密鑰(publickey)認證:客戶端通過用戶名,公鑰以及公鑰算法等信息來與服務器進行認證。
- password-publickey認證:指用戶需要同時滿足密碼認證和密鑰認證才能登錄。
- all認證:只要滿足密碼認證和密鑰認證其中一種即可。
- 會話請求
認證通過后,SSH客戶端向服務器端發送會話請求,請求服務器提供某種類型的服務,即請求與服務器建立相應的會話。
- 會話交互
會話建立后,SSH服務器端和客戶端在該會話上進行數據信息的交互。
四、連接工具
1、PuTTY是Windows的免費SSH連接工具
2、OpenSSH是SSH協議的開源實現,支持在Unix操作系統上運行。
五、SSH密鑰
對稱加密和非對稱加密:
加密可以提高安全性,加密算法將明文轉換為密文后進行安全傳輸。SSH在工作過程中結合使用了對稱加密和非對稱加密兩種類型的算法,通過事先生成的SSH密匙來保證信息傳輸的安全性。
兩種加密算法的加解密過程如下:
對稱加密算法使用同一個密鑰對數據進行加密和解密。SSH連接建立過程中生成的會話密鑰就是對稱密鑰,該對稱密鑰是由客戶端和服務器端基於共享的部分信息和各自的私有數據使用密鑰交換算法分別生成的。因為對稱加密算法加解密的速度很快,所以適用於傳輸大量數據的場景。
非對稱加密的發送和接收需要使用一對關聯的SSH密鑰,公鑰和私鑰。私鑰由生成的一方自己保管,公鑰可以發送給任何請求通信的其他人。發送方用收到的公鑰對自己的通信內容進行加密,只有接收方可以使用私鑰進行解密獲取通信內容。非對稱加密的私鑰不需要暴露在網絡中,安全性大大增加,但是加解密的速度比對稱密鑰慢得多。
SSH連接過程中的兩個階段使用了非對稱加密。一個是在密鑰交換階段,服務器和客戶端都生成了自己臨時的公鑰和私鑰,用於計算出同一個用於后續加密通信內容的會話密鑰。另外一個就是在用戶認證階段,利用只有匹配的私鑰可以唯一解密公鑰加密的內容這一特點,通過客戶端的公鑰私鑰對驗證客戶端的身份。
六、密鑰認證
SSH用戶認證最基本的兩種方式是密碼認證和密鑰認證。密碼認證是將自己的用戶名和密碼發送給服務器進行認證,這種方式比較簡單,且每次登錄都需要輸入用戶名和密碼。密鑰認證使用公鑰私鑰對進行身份驗證,實現安全的免密登錄,是一種廣泛使用且推薦的登錄方式。密鑰認證的基本原理是服務器端使用客戶端的公鑰對隨機內容加密,客戶端使用自己的私鑰解密並發送給服務器以證實自己的身份。
- 在進行SSH連接之前,SSH客戶端需要先生成自己的公鑰私鑰對,並將自己的公鑰存放在SSH服務器上。
- SSH客戶端發送登錄請求,SSH服務器就會根據請求中的用戶名等信息在本地搜索客戶端的公鑰,並用這個公鑰加密一個隨機數發送給客戶端。
- 客戶端使用自己的私鑰對返回信息進行解密,並發送給服務器。
- 服務器驗證客戶端解密的信息是否正確,如果正確則認證通過。
七、參考資源