SSH(Secure Shell,安全外殼)是一種網(wǎng)絡(luò)安全協(xié)議,通過加密和認(rèn)證機(jī)制實(shí)現(xiàn)安全的訪問和文件傳輸?shù)葮I(yè)務(wù)。傳統(tǒng)遠(yuǎn)程登錄或文件傳輸方式,例如Telnet、FTP,使用明文傳輸數(shù)據(jù),存在很多的安全隱患。隨著人們對(duì)網(wǎng)絡(luò)安全的重視,這些方式已經(jīng)慢慢不被接受。SSH協(xié)議通過對(duì)網(wǎng)絡(luò)數(shù)據(jù)進(jìn)行加密和驗(yàn)證,在不安全的網(wǎng)絡(luò)環(huán)境中提供了安全的登錄和其他安全網(wǎng)絡(luò)服務(wù)。作為Telnet和其他不安全遠(yuǎn)程shell協(xié)議的安全替代方案,目前SSH協(xié)議已經(jīng)被全世界廣泛使用,大多數(shù)設(shè)備都支持SSH功能。
目錄
SSH端口號(hào)是什么?
SSH是如何工作的?
使用PuTTY和OpenSSHSSH密鑰
SSH端口號(hào)是什么?
當(dāng)SSH應(yīng)用于STelnet,SFTP以及SCP時(shí),使用的默認(rèn)SSH端口都是22。當(dāng)SSH應(yīng)用于NETCONF時(shí),可以指定SSH端口是22或者830。SSH端口支持修改,更改后當(dāng)前所有的連接都會(huì)斷開,SSH服務(wù)器開始偵聽新的端口。
SSH是如何工作的?
SSH由服務(wù)器和客戶端組成,在整個(gè)通信過程中,為建立安全的SSH通道,會(huì)經(jīng)歷如下幾個(gè)階段:
連接建立
SSH服務(wù)器在指定的端口偵聽客戶端的連接請(qǐng)求,在客戶端向服務(wù)器發(fā)起連接請(qǐng)求后,雙方建立一個(gè)TCP連接。
版本協(xié)商
SSH協(xié)議目前存在SSH1.X(SSH2.0之前的版本)和SSH2.0版本。SSH2.0協(xié)議相比SSH1.X協(xié)議來說,在結(jié)構(gòu)上做了擴(kuò)展,可以支持更多的認(rèn)證方法和密鑰交換方法,同時(shí)提高了服務(wù)能力。SSH服務(wù)器和客戶端通過協(xié)商確定最終使用的SSH版本號(hào)。
算法協(xié)商
SSH支持多種加密算法,雙方根據(jù)各自支持的算法,協(xié)商出最終用于產(chǎn)生會(huì)話密鑰的密鑰交換算法、用于數(shù)據(jù)信息加密的加密算法、用于進(jìn)行數(shù)字簽名和認(rèn)證的公鑰算法以及用于數(shù)據(jù)完整性保護(hù)的HMAC算法。
密鑰交換
服務(wù)器和客戶端通過密鑰交換算法,動(dòng)態(tài)生成共享的會(huì)話密鑰和會(huì)話ID,建立加密通道。會(huì)話密鑰主要用于后續(xù)數(shù)據(jù)傳輸?shù)募用?,?huì)話ID用于在認(rèn)證過程中標(biāo)識(shí)該SSH連接。
用戶認(rèn)證
SSH客戶端向服務(wù)器端發(fā)起認(rèn)證請(qǐng)求,服務(wù)器端對(duì)客戶端進(jìn)行認(rèn)證。SSH支持以下幾種認(rèn)證方式:
密碼(password)認(rèn)證:客戶端通過用戶名和密碼的方式進(jìn)行認(rèn)證,將加密后的用戶名和密碼發(fā)送給服務(wù)器,服務(wù)器解密后與本地保存的用戶名和密碼進(jìn)行對(duì)比,并向客戶端返回認(rèn)證成功或失敗的消息。
密鑰(publickey)認(rèn)證:客戶端通過用戶名,公鑰以及公鑰算法等信息來與服務(wù)器進(jìn)行認(rèn)證。
password-publickey認(rèn)證:指用戶需要同時(shí)滿足密碼認(rèn)證和密鑰認(rèn)證才能登錄。
all認(rèn)證:只要滿足密碼認(rèn)證和密鑰認(rèn)證其中一種即可。
會(huì)話請(qǐng)求
認(rèn)證通過后,SSH客戶端向服務(wù)器端發(fā)送會(huì)話請(qǐng)求,請(qǐng)求服務(wù)器提供某種類型的服務(wù),即請(qǐng)求與服務(wù)器建立相應(yīng)的會(huì)話。
會(huì)話交互
會(huì)話建立后,SSH服務(wù)器端和客戶端在該會(huì)話上進(jìn)行數(shù)據(jù)信息的交互。
使用PuTTY和OpenSSH
PuTTY是Windows上經(jīng)典的免費(fèi)SSH連接工具,通常用于使用SSH協(xié)議遠(yuǎn)程登錄設(shè)備,最新版本可以在PuTTY官網(wǎng)下載。
OpenSSH是SSH協(xié)議的開源實(shí)現(xiàn),支持在Unix操作系統(tǒng)上運(yùn)行,最新版本可以在OpenSSH官網(wǎng)下載。目前Windows10已經(jīng)包含OpenSSH客戶端和服務(wù)器軟件,可在“設(shè)置—應(yīng)用—應(yīng)用與功能—可選功能”中搜索安裝。
SSH密鑰
對(duì)稱加密和非對(duì)稱加密
提高安全性的基本方式就是加密,加密算法通過密鑰將明文轉(zhuǎn)換為密文進(jìn)行安全傳輸。SSH在工作過程中結(jié)合使用了對(duì)稱加密和非對(duì)稱加密兩種類型的算法,通過事先生成的SSH密鑰來保證信息傳輸?shù)陌踩浴煞N加密算法的加解密過程見下圖。
對(duì)稱加密算法
非對(duì)稱加密算法
對(duì)稱加密算法使用同一個(gè)密鑰對(duì)數(shù)據(jù)進(jìn)行加密和解密。SSH連接建立過程中生成的會(huì)話密鑰就是對(duì)稱密鑰,該對(duì)稱密鑰是由客戶端和服務(wù)器端基于共享的部分信息和各自的私有數(shù)據(jù)使用密鑰交換算法分別生成的。因?yàn)閷?duì)稱加密算法加解密的速度很快,所以適用于傳輸大量數(shù)據(jù)的場(chǎng)景。
非對(duì)稱加密的發(fā)送和接收需要使用一對(duì)關(guān)聯(lián)的SSH密鑰,公鑰和私鑰。私鑰由生成的一方自己保管,公鑰可以發(fā)送給任何請(qǐng)求通信的其他人。發(fā)送方用收到的公鑰對(duì)自己的通信內(nèi)容進(jìn)行加密,只有接收方可以使用私鑰進(jìn)行解密獲取通信內(nèi)容。非對(duì)稱加密的私鑰不需要暴露在網(wǎng)絡(luò)中,安全性大大增加,但是加解密的速度比對(duì)稱密鑰慢得多。
SSH連接過程中的兩個(gè)階段使用了非對(duì)稱加密。一個(gè)是在密鑰交換階段,服務(wù)器和客戶端都生成了自己臨時(shí)的公鑰和私鑰,用于計(jì)算出同一個(gè)用于后續(xù)加密通信內(nèi)容的會(huì)話密鑰。另外一個(gè)就是在用戶認(rèn)證階段,利用只有匹配的私鑰可以唯一解密公鑰加密的內(nèi)容這一特點(diǎn),通過客戶端的公鑰私鑰對(duì)驗(yàn)證客戶端的身份。
密鑰認(rèn)證
SSH用戶認(rèn)證最基本的兩種方式是密碼認(rèn)證和密鑰認(rèn)證。密碼認(rèn)證是將自己的用戶名和密碼發(fā)送給服務(wù)器進(jìn)行認(rèn)證,這種方式比較簡(jiǎn)單,且每次登錄都需要輸入用戶名和密碼。密鑰認(rèn)證使用公鑰私鑰對(duì)進(jìn)行身份驗(yàn)證,實(shí)現(xiàn)安全的免密登錄,是一種廣泛使用且推薦的登錄方式。密鑰認(rèn)證的基本原理是服務(wù)器端使用客戶端的公鑰對(duì)隨機(jī)內(nèi)容加密,客戶端使用自己的私鑰解密并發(fā)送給服務(wù)器以證實(shí)自己的身份,具體的過程見下圖。
SSH密鑰認(rèn)證登錄流程
在進(jìn)行SSH連接之前,SSH客戶端需要先生成自己的公鑰私鑰對(duì),并將自己的公鑰存放在SSH服務(wù)器上。
SSH客戶端發(fā)送登錄請(qǐng)求,SSH服務(wù)器就會(huì)根據(jù)請(qǐng)求中的用戶名等信息在本地搜索客戶端的公鑰,并用這個(gè)公鑰加密一個(gè)隨機(jī)數(shù)發(fā)送給客戶端。
客戶端使用自己的私鑰對(duì)返回信息進(jìn)行解密,并發(fā)送給服務(wù)器。
服務(wù)器驗(yàn)證客戶端解密的信息是否正確,如果正確則認(rèn)證通過。
審核編輯:湯梓紅
-
服務(wù)器
+關(guān)注
關(guān)注
12文章
9123瀏覽量
85324 -
網(wǎng)絡(luò)安全
+關(guān)注
關(guān)注
10文章
3155瀏覽量
59699 -
SSH
+關(guān)注
關(guān)注
0文章
188瀏覽量
16335 -
SSH協(xié)議
+關(guān)注
關(guān)注
0文章
5瀏覽量
1607
原文標(biāo)題:一口氣把 SSH 原理搞懂了
文章出處:【微信號(hào):5G通信,微信公眾號(hào):5G通信】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論