SSH端口號是什么?
SSH是如何工作的?
使用PuTTY和OpenSSHSSH密鑰
當SSH應(yīng)用于STelnet,SFTP以及SCP時,使用的默認SSH端口都是22。當SSH應(yīng)用于NETCONF時,可以指定SSH端口是22或者830。SSH端口支持修改,更改后當前所有的連接都會斷開,SSH服務(wù)器開始偵聽新的端口。
SSH由服務(wù)器和客戶端組成,在整個通信過程中,為建立安全的SSH通道,會經(jīng)歷如下幾個階段:
SSH服務(wù)器在指定的端口偵聽客戶端的連接請求,在客戶端向服務(wù)器發(fā)起連接請求后,雙方建立一個TCP連接。
SSH協(xié)議目前存在SSH1.X(SSH2.0之前的版本)和SSH2.0版本。SSH2.0協(xié)議相比SSH1.X協(xié)議來說,在結(jié)構(gòu)上做了擴展,可以支持更多的認證方法和密鑰交換方法,同時提高了服務(wù)能力。SSH服務(wù)器和客戶端通過協(xié)商確定最終使用的SSH版本號。
SSH支持多種加密算法,雙方根據(jù)各自支持的算法,協(xié)商出最終用于產(chǎn)生會話密鑰的密鑰交換算法、用于數(shù)據(jù)信息加密的加密算法、用于進行數(shù)字簽名和認證的公鑰算法以及用于數(shù)據(jù)完整性保護的HMAC算法。
服務(wù)器和客戶端通過密鑰交換算法,動態(tài)生成共享的會話密鑰和會話ID,建立加密通道。會話密鑰主要用于后續(xù)數(shù)據(jù)傳輸?shù)募用,會話ID用于在認證過程中標識該SSH連接。
SSH客戶端向服務(wù)器端發(fā)起認證請求,服務(wù)器端對客戶端進行認證。SSH支持以下幾種認證方式:
認證通過后,SSH客戶端向服務(wù)器端發(fā)送會話請求,請求服務(wù)器提供某種類型的服務(wù),即請求與服務(wù)器建立相應(yīng)的會話。
會話建立后,SSH服務(wù)器端和客戶端在該會話上進行數(shù)據(jù)信息的交互。
PuTTY是Windows上經(jīng)典的免費SSH連接工具,通常用于使用SSH協(xié)議遠程登錄設(shè)備,最新版本可以在PuTTY官網(wǎng)下載。
OpenSSH是SSH協(xié)議的開源實現(xiàn),支持在Unix操作系統(tǒng)上運行,最新版本可以在OpenSSH官網(wǎng)下載。目前Windows10已經(jīng)包含OpenSSH客戶端和服務(wù)器軟件,可在“設(shè)置—應(yīng)用—應(yīng)用與功能—可選功能”中搜索安裝。
提高安全性的基本方式就是加密,加密算法通過密鑰將明文轉(zhuǎn)換為密文進行安全傳輸。SSH在工作過程中結(jié)合使用了對稱加密和非對稱加密兩種類型的算法,通過事先生成的SSH密鑰來保證信息傳輸?shù)陌踩。兩種加密算法的加解密過程見下圖。
對稱加密算法
非對稱加密算法
對稱加密算法使用同一個密鑰對數(shù)據(jù)進行加密和解密。SSH連接建立過程中生成的會話密鑰就是對稱密鑰,該對稱密鑰是由客戶端和服務(wù)器端基于共享的部分信息和各自的私有數(shù)據(jù)使用密鑰交換算法分別生成的。因為對稱加密算法加解密的速度很快,所以適用于傳輸大量數(shù)據(jù)的場景。
非對稱加密的發(fā)送和接收需要使用一對關(guān)聯(lián)的SSH密鑰,公鑰和私鑰。私鑰由生成的一方自己保管,公鑰可以發(fā)送給任何請求通信的其他人。發(fā)送方用收到的公鑰對自己的通信內(nèi)容進行加密,只有接收方可以使用私鑰進行解密獲取通信內(nèi)容。非對稱加密的私鑰不需要暴露在網(wǎng)絡(luò)中,安全性大大增加,但是加解密的速度比對稱密鑰慢得多。
SSH連接過程中的兩個階段使用了非對稱加密。一個是在密鑰交換階段,服務(wù)器和客戶端都生成了自己臨時的公鑰和私鑰,用于計算出同一個用于后續(xù)加密通信內(nèi)容的會話密鑰。另外一個就是在用戶認證階段,利用只有匹配的私鑰可以唯一解密公鑰加密的內(nèi)容這一特點,通過客戶端的公鑰私鑰對驗證客戶端的身份。
SSH用戶認證最基本的兩種方式是密碼認證和密鑰認證。密碼認證是將自己的用戶名和密碼發(fā)送給服務(wù)器進行認證,這種方式比較簡單,且每次登錄都需要輸入用戶名和密碼。密鑰認證使用公鑰私鑰對進行身份驗證,實現(xiàn)安全的免密登錄,是一種廣泛使用且推薦的登錄方式。密鑰認證的基本原理是服務(wù)器端使用客戶端的公鑰對隨機內(nèi)容加密,客戶端使用自己的私鑰解密并發(fā)送給服務(wù)器以證實自己的身份,具體的過程見下圖。
SSH密鑰認證登錄流程