操作系統:SSH協議知識介紹
今天給大家分享SSH協議相關的知識介紹,希望對大家能有所幫助!
1、SSH協議概念介紹
SSH(Secure Shell)安全外殼協議,是一種建立在應用層基礎上的安全協議,通過對密碼進行加密傳輸驗證,可以在不安全的網絡中對網絡服務提供安全的傳輸環境,實現SSH客戶端和SSH服務器端的連接,所以SSH是基于客戶端-服務端模式。
2、SSH服務組成
SSH服務由服務端軟件OpenSSH和連接客戶端組成(SSH、SecureCRT,xshell等),默認端口是22。SSH是一個守護進程,負責實時監聽客戶端請求,并進行處理。
3、SSH協議框架組成
SSH協議框架中核心部分的三個協議:傳輸層協議、用戶認證協議、連接協議。
- 傳輸層協議(The Transport Layer Protocol):提供服務器認證,數據安全性,信息完整性等功能的支持。
- 用戶認證協議(The User Authentication Protocol):為服務器提供客戶端的身份的識別。
- 連接協議(The Connection Protocol):將加密的信息隧道復用成若干個邏輯通道,提供給更高層的應用協議使用; 各種高層應用協議可以相對地獨立于SSH基本體系之外,然后依靠這個基本框架,通過連接協議使用SSH的安全機制。
4、SSH工作流程
4.1 版本號協商階段
SSH目前包括 SSH1和SSH2兩個版本, 雙方通過版本協商確定使用的版本
- 服務端開啟22端口,等待客戶端發起連接請求
- 客戶端向服務端發起TCP初始連接請求,建立后,服務端向客戶端發送報文(版本標志字符串:SSH-<主協議版本號>.<次協議版本號>-<軟件版本號>>)
- 客戶端收到報文后,解析數據包,如果服務端的協議版本號比自己的低,且客戶端能支持服務端的低版本,就采用服務器端的低版本協議號,否則采用客戶端自己的協議版本號。
- 客戶端回應服務器一個報文,包含客戶端決定使用的協議版本號。服務端會比較客戶端發來的版本號,決定是否能同客戶端進行正常工作。
- 協商成功,就會進入密鑰和算法協商階段,否則服務端斷開TCP連接。
注意:版本號協商階段報文都是采用明文方式傳輸的。
4.2 密鑰和算法協商階段
SSH支持多種加密算法, 雙方根據服務端和客戶端支持的算法,協商出最終使用的算法
- 服務端和客戶端分別發送算法協商報文給對方,報文中包含自己支持的公鑰算法列表、加密算法列表、MAC(Message Authentication Code,消息驗證碼)算法列表、壓縮算法列表等協商信息。
- 服務端和客戶端根據對方和自己支持的算法列表確定最終使用的算法。
- 服務端和客戶端利用 DH交換(Diffie-Hellman Exchange)算法、主機密鑰對等參數,生成會話密鑰和會話 ID,然后雙方都拿到了相同的會話ID和會話密鑰。
- 后續數據通信,兩端都會使用會話密鑰進行加密和解密,從而保證了數據傳送的安全
- 認證階段,兩端會使用會話 ID用于認證過程。
注意:在協商階段之前,服務器端已經生成 RSA或 DSA密鑰對,主要用于參與會話密鑰的生成。
4.3 認證階段
SSH客戶端向服務端發起認證請求, 服務端會對客戶端進行認證
- 客戶端向服務端發送認證請求,認證請求信息中包含用戶名、認證方法、與該認證方法相關的內容(比如:password認證時,內容為密碼)。
- 服務端對客戶端進行認證,如果認證失敗,會向客戶端發送認證失敗消息,其中也包含可以再次發起認證的方法列表。
- 客戶端從服務端返回的認證方法列表中選取一種認證方法再次進行認證。
- 該過程反復進行, 直到認證成功或者認證次數達到上限, 服務端關閉連接為止。
4.4 會話請求階段:
認證通過后,客戶端向服務端發送會話請求
- 服務器等待客戶端的請求;
- 認證通過后,客戶端向服務器發送會話請求;
- 服務器處理客戶端的請求。請求被成功處理后, 服務端會向客戶端回應 SSH_SMSG_SUCCESS包,SSH進入交互會話階段;否則回應 SSH_SMSG_FAILURE包,表示服務器處理請求失敗或者不能識別請求。
4.5 交互會話階段
會話請求通過后,服務端和客戶端可以進行信息的交互
- 客戶端將要執行的命令加密后傳給服務器;
- 服務器接收到報文,解密后執行該命令,將執行的結果加密發還給客戶端;
- 客戶端將接收到的結果解密后顯示到終端上.
說明:在當前階段下,數據可以被雙向傳送
5、SSH的認證方式
5.1 password認證:
客戶端向服務端發出 password認證請求,然后將用戶名和密碼加密后發送給服務器;服務器將該信息解密后得到用戶名和密碼的明文,與自己設備上保存的用戶名和密碼進行比較,并返回認證成功或失敗的消息。
5.2publickey 認證:
采用數字簽名的方法來認證客戶端。目前,設備上可以利用RSA和 DSA兩種公共密鑰算法實現數字簽名。客戶端發送包含用戶名、公共密鑰和公共密鑰算法的 publickey 認證請求給服務端。服務器、端對公鑰進行合法性檢查,如果不合法,則直接發送失敗消息;否則,服務器利用數字簽名對客戶端進行認證,并返回認證成功或失敗的消息。
5.3. password-publickey 認證(SSH2.0)
指定該用戶的認證方式為 password 和 publickey認證必須同時滿足。說明:客戶端版本為 SSH1的用戶只要通過其中一種認證即可登錄;客戶端版本為 SSH2的用戶必須兩種認證都通過才能登錄。
5.4 any認證(SSH2.0)
指定該用戶的認證方式可以是 password、 publickey中任意一種。
6、SSH常用命令
6.1 遠程登錄
ssh 用戶名@遠程主機ip:首次登陸需要下載對方公鑰。示例:ssh 192.168.1.100
6.2 遠程上傳
scp [需要上傳文件的本地位置] root@遠程主機ip:[需要保存在遠程主機的路徑]:從本地上傳文件到遠程主機示例:scp /root/test.sh root@192.168.1.100
6.3 遠程復制
scp root@遠程主機ip:[遠程主機文件絕對路徑] [需要保存的本地位置]:從遠程主機下載文件到本機示例:scp root@192.168.1.100:/root/test.sh /root