來源:程序IT圈
SSH(Secure Shell,安全外殼)是一種網絡安全協議,通過加密和認證機制實現安全的訪問和文件傳輸等業務。傳統遠程登錄或文件傳輸方式,例如Telnet、FTP,使用明文傳輸數據,存在很多的安全隱患。隨着人們對網絡安全的重視,這些方式已經慢慢不被接受。SSH協議通過對網絡數據進行加密和驗證,在不安全的網絡環境中提供了安全的登錄和其他安全網絡服務。作為Telnet和其他不安全遠程shell協議的安全替代方案,目前SSH協議已經被全世界廣泛使用,大多數設備都支持SSH功能。
目錄SSH端口號是什麼?
SSH是如何工作的?
使用PuTTY和OpenSSHSSH密鑰
當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服務器端和客戶端在該會話上進行數據信息的交互。
使用PuTTY和OpenSSHPuTTY是Windows上經典的免費SSH連接工具,通常用於使用SSH協議遠程登錄設備,最新版本可以在PuTTY官網下載。
OpenSSH是SSH協議的開源實現,支持在Unix操作系統上運行,最新版本可以在OpenSSH官網下載。目前Windows10已經包含OpenSSH客戶端和服務器軟件,可在「設置—應用—應用與功能—可選功能」中搜索安裝。
SSH密鑰對稱加密和非對稱加密提高安全性的基本方式就是加密,加密算法通過密鑰將明文轉換為密文進行安全傳輸。SSH在工作過程中結合使用了對稱加密和非對稱加密兩種類型的算法,通過事先生成的SSH密鑰來保證信息傳輸的安全性。兩種加密算法的加解密過程見下圖。

對稱加密算法

非對稱加密算法
對稱加密算法使用同一個密鑰對數據進行加密和解密。SSH連接建立過程中生成的會話密鑰就是對稱密鑰,該對稱密鑰是由客戶端和服務器端基於共享的部分信息和各自的私有數據使用密鑰交換算法分別生成的。因為對稱加密算法加解密的速度很快,所以適用於傳輸大量數據的場景。
非對稱加密的發送和接收需要使用一對關聯的SSH密鑰,公鑰和私鑰。私鑰由生成的一方自己保管,公鑰可以發送給任何請求通信的其他人。發送方用收到的公鑰對自己的通信內容進行加密,只有接收方可以使用私鑰進行解密獲取通信內容。非對稱加密的私鑰不需要暴露在網絡中,安全性大大增加,但是加解密的速度比對稱密鑰慢得多。
SSH連接過程中的兩個階段使用了非對稱加密。一個是在密鑰交換階段,服務器和客戶端都生成了自己臨時的公鑰和私鑰,用於計算出同一個用於後續加密通信內容的會話密鑰。另外一個就是在用戶認證階段,利用只有匹配的私鑰可以唯一解密公鑰加密的內容這一特點,通過客戶端的公鑰私鑰對驗證客戶端的身份。
密鑰認證SSH用戶認證最基本的兩種方式是密碼認證和密鑰認證。密碼認證是將自己的用戶名和密碼發送給服務器進行認證,這種方式比較簡單,且每次登錄都需要輸入用戶名和密碼。密鑰認證使用公鑰私鑰對進行身份驗證,實現安全的免密登錄,是一種廣泛使用且推薦的登錄方式。密鑰認證的基本原理是服務器端使用客戶端的公鑰對隨機內容加密,客戶端使用自己的私鑰解密並發送給服務器以證實自己的身份,具體的過程見下圖。

SSH密鑰認證登錄流程
在進行SSH連接之前,SSH客戶端需要先生成自己的公鑰私鑰對,並將自己的公鑰存放在SSH服務器上。
SSH客戶端發送登錄請求,SSH服務器就會根據請求中的用戶名等信息在本地搜索客戶端的公鑰,並用這個公鑰加密一個隨機數發送給客戶端。
客戶端使用自己的私鑰對返回信息進行解密,並發送給服務器。
服務器驗證客戶端解密的信息是否正確,如果正確則認證通過。
【Linux常用命令速查手冊】關注【入門小站】,後台回復 「1001」 自取。
近期熱文
Git常用命令大全
俄羅斯怎麼不怕芯片制裁呢?
30張圖詳解操作系統總結!
6張圖帶你搞懂TCP為什麼是三次握手?
NAT穿透是如何工作的
CentOS7詳細安裝教程--圖文介紹超詳細
VMware中安裝Windows11操作系統
明明還有空間,硬盤卻寫不進去了!
Docker疑難雜症匯總一
35個非常實用的Shell拿來就用腳本實例!
Docker疑難雜症匯總(二)
11個Git實用技巧記錄!
