SSH是Secure Shell(安全外殼)的簡稱。用戶通過一個不能保證安全的網絡環境遠程登錄到設備時,SSH可以利用加密和強大的認證功能提供安全保障,保護設備不受諸如IP地址欺詐、明文密碼截取等攻擊。
設備支持SSH服務器功能,可以接受多個SSH客戶端的連接。同時,設備還支持SSH客戶端功能,允許用戶與支持SSH服務器功能的設備建立SSH連接,從而實現從本地設備通過SSH登錄到遠程設備上。
注意:
l 目前,設備作為SSH服務器時,支持SSH2和SSH1兩個版本;設備作為SSH客戶端時,隻支持SSH2版本。
l 如無特殊說明,文中的SSH均指SSH2。
在整個通訊過程中,為實現SSH的安全連接,服務器端與客戶端要經曆如下五個階段:
表1 SSH服務器端與客戶端建立連接的五個階段
過程 | 說明 | 詳細內容 |
版本號協商階段 | SSH目前包括SSH1和SSH2兩個版本,雙方通過版本協商確定使用的版本 | 1. |
密鑰和算法協商階段 | SSH支持多種加密算法,雙方根據本端和對端支持的算法,協商出最終使用的算法 | 2. |
認證階段 | SSH客戶端向服務器端發起認證請求,服務器端對客戶端進行認證 | 3. |
會話請求階段 | 認證通過後,客戶端向服務器端發送會話請求 | 4. |
交互會話階段 | 會話請求通過後,服務器端和客戶端進行信息的交互 | 5. |
具體步驟如下:
l 服務器打開端口22,等待客戶端連接。
l 客戶端向服務器端發起TCP初始連接請求,TCP連接建立後,服務器向客戶端發送第一個報文,包括版本標誌字符串,格式為“SSH-<主協議版本號>.<次協議版本號>-<軟件版本號>”,協議版本號由主版本號和次版本號組成,軟件版本號主要是為調試使用。
l 客戶端收到報文後,解析該數據包,如果服務器端的協議版本號比自己的低,且客戶端能支持服務器端的低版本,就使用服務器端的低版本協議號,否則使用自己的協議版本號。
l 客戶端回應服務器一個報文,包含了客戶端決定使用的協議版本號。服務器比較客戶端發來的版本號,決定是否能同客戶端一起工作。
l 如果協商成功,則進入密鑰和算法協商階段,否則服務器端斷開TCP連接。
& 說明:
上述報文都是采用明文方式傳輸的。
具體步驟如下:
l 服務器端和客戶端分別發送算法協商報文給對端,報文中包含自己支持的公鑰算法列表、加密算法列表、MAC(Message Authentication Code,消息驗證碼)算法列表、壓縮算法列表等。
l 服務器端和客戶端根據對端和本端支持的算法列表得出最終使用的算法。
l 服務器端和客戶端利用DH交換(Diffie-Hellman Exchange)算法、主機密鑰對等參數,生成會話密鑰和會話ID。
通過以上步驟,服務器端和客戶端就取得了相同的會話密鑰和會話ID。對於後續傳輸的數據,兩端都會使用會話密鑰進行加密和解密,保證了數據傳送的安全。在認證階段,兩端會使用會話ID用於認證過程。
注意:
在協商階段之前,服務器端已經生成RSA或DSA密鑰對,他們主要用於參與會話密鑰的生成。
具體步驟如下:
l 客戶端向服務器端發送認證請求,認證請求中包含用戶名、認證方法、與該認證方法相關的內容(如:password認證時,內容為密碼)。
l 服務器端對客戶端進行認證,如果認證失敗,則向客戶端發送認證失敗消息,其中包含可以再次認證的方法列表。
l 客戶端從認證方法列表中選取一種認證方法再次進行認證。
l 該過程反複進行,直到認證成功或者認證次數達到上限,服務器關閉連接為止。
SSH提供兩種認證方法:
l password認證:客戶端向服務器發出password認證請求,將用戶名和密碼加密後發送給服務器;服務器將該信息解密後得到用戶名和密碼的明文,與設備上保存的用戶名和密碼進行比較,並返回認證成功或失敗的消息。
l publickey認證:采用數字簽名的方法來認證客戶端。目前,設備上可以利用RSA和DSA兩種公共密鑰算法實現數字簽名。客戶端發送包含用戶名、公共密鑰和公共密鑰算法的publickey認證請求給服務器端。服務器對公鑰進行合法性檢查,如果不合法,則直接發送失敗消息;否則,服務器利用數字簽名對客戶端進行認證,並返回認證成功或失敗的消息。
& 說明:
除了password認證和publickey認證,SSH2.0還提供了password-publickey認證和any認證。
l password-publickey認證:指定該用戶的認證方式為password和publickey認證同時滿足。客戶端版本為SSH1的用戶隻要通過其中一種認證即可登錄;客戶端版本為SSH2的用戶必須兩種認證都通過才能登錄。
l any認證:指定該用戶的認證方式可以是password,也可以是publickey。
認證通過後,客戶端向服務器發送會話請求。服務器等待並處理客戶端的請求。在這個階段,請求被成功處理後,服務器會向客戶端回應SSH_SMSG_SUCCESS包,SSH進入交互會話階段;否則回應SSH_SMSG_FAILURE包,表示服務器處理請求失敗或者不能識別請求。
會話請求成功後,連接進入交互會話階段。在這個模式下,數據被雙向傳送。客戶端將要執行的命令加密後傳給服務器,服務器接收到報文,解密後執行該命令,將執行的結果加密發還給客戶端,客戶端將接收到的結果解密後顯示到終端上。
& 說明:
l 在交互會話階段,客戶端可以通過粘貼文本會話的方式發送要執行的命令,但文本會話不能超過2000字節,且粘貼的命令最好是同一視圖下的命令,否則服務器可能無法正確執行該命令。
l 如果粘貼的文本會話超過2000字節,可以采用將配置文件上傳到服務器,利用新的配置文件重新啟動的方式執行這些命令。
SFTP是Secure FTP的簡稱,是SSH 2.0中新增的功能。
SFTP建立在SSH連接的基礎之上,它使得遠程用戶可以安全地登錄設備,進行文件管理和文件傳送等操作,為數據傳輸提供了更高的安全保障。同時,由於設備支持作為客戶端的功能,用戶可以從本地設備安全登錄到遠程設備上,進行文件的安全傳輸。