遠程登錄服務給係統管理員的工作帶來了極大的方便,但Telnet在網絡上采用明文傳送密碼和數據時,這些密碼和數據很容易被截獲,從而極大地危及到網絡通信安全。SSH(Secure Shell,安全Shell)協議在遠程服務器和本地計算機之間建立加密數據傳輸通道來保證數據傳輸的安全性。SSH服務不但實現了與Telnet一樣的遠程登錄服務,還提供了安全的FTP服務功能。Linux中的Open SSH就實現了SSH協議支持的服務功能。本任務要求讀者Open SSH服務,然後分別在Linux環境中用ssh客戶端連接測試SSH服務,在Windows環境中使用PuTTY客戶端程序連接測試SSH服務。

任務準備

一、認識SSH服務的工作過程

SSH協議是專為遠程登錄會話和其他網絡服務提供安全保障的協議,它支持基於口令的認證和基於公開密鑰的客戶認證,並在遠程服務器和本地計算機的數據通信過程中采用加密技術,實現了在非安全網絡上提供安全的遠程登錄和其他安全網絡服務的技術。

SSH服務的工作過程:在本地計算機與遠程服務器之間建立SSH連接要經曆五個階段,它們是:SSH版本協商、協商加密算法和會話密鑰、客戶端認證、會話請求和交互會話。在會話密鑰協商和客戶端認證階段將使用RSA非對稱加密算法生成密鑰對,密鑰對由一個公共密鑰(Public Key,公鑰)和一個私有密鑰(Private Key,私鑰)組成,公鑰可以公布到網絡上,私鑰則由所有者安全保存。在密鑰對中,公鑰加密的數據隻能用對應的私鑰解密,反之亦然。因此,公鑰用於加密發送給所有者的數據,而私鑰用於解密數據和提供身份認證。

SSH服務器的主機密鑰對在SSH服務器啟動時生成並保存在相應的密鑰文件中。

(1)SSH版本協商階段。

SSH協議有SSH1和SSH2兩個版本,二者不兼容。在建立SSH會話連接時要協商使用的版本號。SSH服務器啟動後默認將在22號端口監聽來自客戶端的連接請求,當客戶端發起TCP連接請求並建立連接後,SSH服務器向客戶端發送包含SSH版本號標誌的報文,客戶端通過比較服務器使用的版本號和自己支持的版本號,然後向服務器回傳一個報文告訴服務器要使用的版本號,服務器決定是否可以與客戶端一起工作,如果協商成功則進入會話密鑰協商階段,否則斷開與客戶端的TCP連接。

(2)加密算法與會話密鑰協商階段。

SSH服務器和客戶端分別發送加密算法協商報文給對方,用於協商最終使用的加密算法。SSH服務器還把自己的公鑰傳給客戶端,客戶端將把該公鑰保存在本地文件係統中。

加密算法協商完成後,SSH服務器端生成本次連接的會話密鑰和會話ID號,並用自己的私鑰加密後傳給客戶端,客戶端使用服務器的公鑰解密後獲得會話密鑰和會話ID號,並完成對SSH服務器的身份認證。至此,SSH服務器和客戶端就取得了相同的會話密鑰和會話ID號。在後續傳輸數據時,兩端使用該會話密鑰和對稱加密技術進行加密和解密保證了數據傳送的安全。如果協商失敗,SSH服務器將中斷連接。

(3)客戶端認證階段。

客戶端向SSH服務器端發送認證請求報文,認證請求中包含賬戶名、認證方法和與該認證方法相關的內容。如果是口令認證方式,客戶端將賬戶名和密碼用會話密鑰加密後發送給SSH服務器,服務器則用相同的會話密鑰解密後取得賬戶名和密碼交給Linux係統進行驗證,並返回認證成功或失敗的消息。如果采用基於公鑰的認證方式,則事先在客戶機上用RSA算法生成一個密鑰對,並把其中的公鑰複製到SSH服務器中。在進行客戶身份認證時,客戶端發送包含賬戶名、公共密鑰和公共密鑰算法的認證請求給SSH服務器。服務器對公鑰進行合法性檢查,即檢查是否與之前保存的該客戶端的公鑰一致。如果不合法,則直接發送認證失敗消息;否則,SSH服務器產生一個隨機數並用該客戶端的公鑰加密後傳給客戶端,客戶端用自己的私鑰解密後再用SSH服務器的公鑰加密後傳回SSH服務器,服務器解密後與先產生的隨機數對比,並根據結果返回認證成功或失敗的消息。客戶端認證成功後則進入會話請求階段,否則中斷連接。

(4)會話請求階段。

客戶身份認證通過後,客戶端向SSH服務器發起會話請求,服務器處理客戶端的會話請求,並回應會話請求是否成功的消息。

(5)交互會話階段。

客戶端將要執行的命令加密後傳給服務器,服務器解密後執行該命令並將執行的結果加密返回給客戶端,客戶端將接收到的結果解密後顯示在終端上。

學藝錦囊

◎密鑰是數據加密解密時使用的一串字符編碼。密鑰是密碼技術中的重要組成元素,密鑰的生成、使用和管理關係到密碼係統的有效性。

◎對稱(或稱私有密鑰)加密技術和非對稱(或稱公開密鑰)加密技術是當前兩種主流加密技術。對稱加密技術加密和解密使用相同的密鑰,加密解密速度快,適用於對大規模數據的加密,但密鑰管理困難。

◎非對稱加密技術使用一個密鑰對,其中公共密鑰公開發布,用於數據加密,私有密鑰由用戶安全保存,用於數據解密和身份認證。非對稱加密技術靈活,同時實現了數據加密和身份認證,但執行速度慢,適用於對少量數據,如賬號、密碼等的加密。在實際運用中,它常與對稱加密技術結合使用。

◎明文是指數據加密前的可讀形式,數據加密後轉換成不可讀的形式就是密文。

◎SSH2在安全性和性能方麵較SSH1有很大的提高,SSH2與SSH1不兼容且在實際應用中SSH2正快速取代SSH1。Open SSH同時支持SSH1和SSH2。

◎在SSH連接建立過程中,協商SSH版本時采用明文傳輸報文,在會話密鑰協商階段,SSH服務器主機密鑰對參與了會話密鑰的生成和分發,而在隨後的數據傳輸中SSH服務器和客戶端采用對稱加密技術並使用會話密鑰進行數據的加、解密操作。

◎會話密鑰是在建立SSH連接時由遠程服務器和本地計算機協商生成的,隻有SSH連接兩端的主機知道並隻用於本次會話連接的數據加密,不同主機之間,不同次連接的會話密鑰都是不一樣的,因此,SSH服務有極高的安全性。

二、SSH客戶工具程序

1.SSH遠程登錄客戶程序

[root@vm ~]ssh [選項] [賬戶名@]主機名 [命令]

SSH使用戶能夠登錄到遠程主機上進行交互式會話或直接在遠程主機上執行指定的命令。

主機名:是遠程主機的名稱,它可以是某個本地係統名,也可以是FQDN或IP地址。

賬戶名:是用於登錄遠程主機的賬戶名稱,該賬戶必須在遠程主機係統中存在。如果省略賬戶名,SSH將使用正在本地係統上使用的賬戶名登錄。賬戶名采用郵箱地址格式。

命令:是指定要在遠程主機上執行的命令,命令執行完成後將自動關閉SSH連接,返回本地係統控製台。省略命令將以交互方式與遠程主機會話。

選項:

-C:啟用壓縮功能。

-f:在輸入口令之後,把ssh放到後台運行。

-L:將本地係統中的某個端口轉發到遠程係統。

-l 賬戶名:以指定的賬戶身份登錄。

-n:將SSH的標準輸入重定向到從/dev/null獲取輸入,適用於在後台運行SSH。

-o(option):按照配置文件所采用的格式來指定option。

-p 端口號:指定要連接到的遠程主機的端口。

-R:將遠程係統上的某個端口轉發到本地客戶端。

-t 偽終端號:為遠程主機上的SSH進程分配一個偽終端tty,以便需要tty的程序能夠正常運行。

2.本地與遠程之間的安全文件複製

[root@vm ~] scp [選項] [[賬戶名@]源主機名:]源文件  [[賬戶名@]目的主機名:] [目的文件]

scp在網絡上將一個普通文件或目錄文件從一個係統複製到另一個係統(源、目的都可以是遠程係統)。文件名與主機名之間用冒號(:)分隔。省略文件前麵的主機名時,scp以本地係統替代。賬戶名與主機名的指定與SSH中相同。

源文件:指定待複製的文件或目錄。可用路徑指定文件位置,默認是用戶主目錄。

目的文件:指定文件複製到目的地的文件名,如果目的文件名是一個目錄,那麼文件將複製到該目錄下並保持原來的文件名。

選項:

-C:啟用壓縮功能。

-P 端口號:指定連接到遠程主機的端口號。

-p:複製時保留源文件的修改時間、訪問時間等特性。

-q:在複製文件時不顯示進度信息。

-r:循環複製源目錄中各級目錄及文件。

3.sftp訪問sftp-server安全FTP服務

[root@vm ~]sftp [選項] [賬戶名@]主機名

sftp的登錄方式與SSH相同。在功能上,sftp等同於ftp,它將ftp命令映射成SSH命令。

登錄後出現提示符sftp>,輸入命令?顯示命令列表。

4.ssh-keygen生成SSH客戶端密鑰對

[root@vm ~]ssh-keygen [選項]

ssh-keygen用於生成、管理和轉換認證密鑰,包括 RSA 和 DSA 兩種密鑰。在客戶端運行本程序,將在 ~/.ssh/identity,~/.ssh/id_dsa 或 ~/.ssh/id_rsa 文件中創建認證所需的密鑰。另外,係統管理員還可以用它產生主機密鑰。通常這個程序產生一個密鑰對,並要求指定一個文件存放私鑰,同時將公鑰存放在附加了“.pub”後綴的同名文件中。密鑰生成過程中要求輸入一個密碼短語(passphrase)用於私鑰保護,空表示沒有密碼短語,主機密鑰的密碼短語必須為空。

選項:

-b 位數:指定密鑰長度。對於RSA密鑰,最小要求768位,默認是2048位。DSA密鑰必須恰好是1024位。

-e:讀取OpenSSH的私鑰或公鑰文件並顯示其內容。

-f 文件名:指定密鑰文件名。

-p:改變私鑰文件的密碼短語而不重建私鑰。

-R 主機名:從 known_hosts 文件中刪除所有屬於指定主機的密鑰。

-t 算法類型:指定要創建的密鑰類型。rsa1用於SSH1,rsa和dsa用於SSH2。

-v:ssh-keygen 將會輸出處理過程的詳細調試信息。