概述
SSH是(Secure SHell protocol) 的簡(jiǎn)寫(xiě)堪置,安全外殼協(xié)議(SSH)是一種在不安全網(wǎng)絡(luò)上提供安全遠(yuǎn)程登錄及其它安全網(wǎng)絡(luò)服務(wù)的協(xié)議躬存。
OpenSSH 是SSH (Secure SHell)協(xié)議的免費(fèi)開(kāi)源實(shí)現(xiàn)舀锨。SSH協(xié)議族可以用來(lái)進(jìn)行遠(yuǎn)程控制岭洲,或在計(jì)算機(jī)之間傳送文件。而實(shí)現(xiàn)此功能的傳統(tǒng)方式坎匿,如telnet(終端仿真協(xié)議)盾剩、 rcp ftp、 rlogin替蔬、rsh都是極為不安全的告私,并且會(huì)使用明文傳送密碼。OpenSSH提供了服務(wù)端后臺(tái)程序和客戶(hù)端工具承桥,用來(lái)加密遠(yuǎn)程控件和文件傳輸過(guò)程的中的數(shù)據(jù)驻粟,并由此來(lái)代替原來(lái)的類(lèi)似服務(wù)。
在過(guò)去我們使用的rsh和telnet凶异,因?yàn)榘ǖ卿洉r(shí)的ID和密碼數(shù)據(jù)沒(méi)有加密就傳到網(wǎng)絡(luò)上蜀撑,存在安全上的問(wèn)題挤巡。即使在內(nèi)部網(wǎng)上,也有在因特網(wǎng)上的竊取和篡改等危險(xiǎn)性酷麦。SSH將包括密碼在內(nèi)的所有數(shù)據(jù)都已進(jìn)行了加密處理矿卑,可以進(jìn)行更安全的遠(yuǎn)程操作。在SSH中沃饶,由于協(xié)議標(biāo)準(zhǔn)的不同而存在SSH1和SSH2兩個(gè)不同的版本母廷。SSH2是為了回避SSH1所使用的加密算法的許可證問(wèn)題而開(kāi)發(fā)的(現(xiàn)在這一許可證問(wèn)題已經(jīng)不存在了)。TLES 8中作為安裝SSH協(xié)議的應(yīng)用程序采用了開(kāi)放源碼的OpenSSH绍坝。OpenSSH與SSH1和SSH2的任何一個(gè)協(xié)議都能對(duì)應(yīng)徘意,但默認(rèn)使用SSH2。
更詳細(xì)的說(shuō)明以及安裝使用轩褐,請(qǐng)參考官網(wǎng):http://www.openssh.com/
主要功能
- 類(lèi)似 telnet 的遠(yuǎn)程聯(lián)機(jī)使用 shell 的服務(wù)器椎咧,即 ssh。
- 類(lèi)似 FTP 服務(wù)的 sftp-server 把介,提供更安全的 FTP 服務(wù)勤讽。
工作原理
- 服務(wù)器建立公鑰: 每一次啟動(dòng) sshd 服務(wù)時(shí),該服務(wù)會(huì)主動(dòng)去找 /etc/ssh/ssh_host* 的文件拗踢,若系統(tǒng)剛剛安裝完成時(shí)脚牍,由于沒(méi)有這些公鑰,因此 sshd 會(huì)主動(dòng)去計(jì)算出這些需要的公鑰巢墅,同時(shí)也會(huì)計(jì)算出服務(wù)器自己需要的私鑰诸狭。
- 客戶(hù)端主動(dòng)聯(lián)機(jī)請(qǐng)求: 若客戶(hù)端想要聯(lián)機(jī)到 ssh 服務(wù)器,則需要使用適當(dāng)?shù)目蛻?hù)端程序來(lái)聯(lián)機(jī)君纫,包括 ssh, putty 等客戶(hù)端程序連接驯遇。
- 服務(wù)器傳送公鑰給客戶(hù)端: 接收到客戶(hù)端的要求后,服務(wù)器便將第一個(gè)步驟取得的公鑰傳送給客戶(hù)端使用 (此時(shí)應(yīng)是明碼傳送蓄髓,反正公鑰本來(lái)就是給大家使用的)叉庐。
- 客戶(hù)端記錄并比對(duì)服務(wù)器的公鑰數(shù)據(jù)及隨機(jī)計(jì)算自己的公私鑰: 若客戶(hù)端第一次連接到此服務(wù)器,則會(huì)將服務(wù)器的公鑰記錄到客戶(hù)端的用戶(hù)家目錄內(nèi)的 ~/.ssh/known_hosts 会喝。若是已經(jīng)記錄過(guò)該服務(wù)器的公鑰陡叠,則客戶(hù)端會(huì)去比對(duì)此次接收到的與之前的記錄是否有差異。若接受此公鑰肢执, 則開(kāi)始計(jì)算客戶(hù)端自己的公私鑰枉阵。
- 回傳客戶(hù)端的公鑰到服務(wù)器端: 用戶(hù)將自己的公鑰傳送給服務(wù)器。此時(shí)服務(wù)器:具有服務(wù)器的私鑰與客戶(hù)端的公鑰预茄,而客戶(hù)端則是: 具有服務(wù)器的公鑰以及客戶(hù)端自己的私鑰岭妖,你會(huì)看到,在此次聯(lián)機(jī)的服務(wù)器與客戶(hù)端的密鑰系統(tǒng) (公鑰+私鑰) 并不一樣反璃,所以才稱(chēng)為非對(duì)稱(chēng)加密系統(tǒng)昵慌。
- 開(kāi)始雙向加解密: (1)服務(wù)器到客戶(hù)端:服務(wù)器傳送數(shù)據(jù)時(shí),拿用戶(hù)的公鑰加密后送出淮蜈≌剩客戶(hù)端接收后,用自己的私鑰解密 (2)客戶(hù)端到服務(wù)器:客戶(hù)端傳送數(shù)據(jù)時(shí)梧田,拿服務(wù)器的公鑰加密后送出淳蔼。服務(wù)器接收后,用服務(wù)器的私鑰解密裁眯,這樣就能保證通信安全鹉梨。
組成
SSH 主要有三部分組成:
- 傳輸層協(xié)議 [SSH-TRANS] 提供了服務(wù)器認(rèn)證,保密性及完整性穿稳。此外它有時(shí)還提供壓縮功能存皂。 SSH-TRANS 通常運(yùn)行在 TCP/IP連接上,也可能用于其它可靠數(shù)據(jù)流上逢艘。 SSH-TRANS 提供了強(qiáng)力的加密技術(shù)旦袋、密碼主機(jī)認(rèn)證及完整性保護(hù)。該協(xié)議中的認(rèn)證基于主機(jī)它改,并且該協(xié)議不執(zhí)行用戶(hù)認(rèn)證疤孕。更高層的用戶(hù)認(rèn)證協(xié)議可以設(shè)計(jì)為在此協(xié)議之上。
- 用戶(hù)認(rèn)證協(xié)議 [SSH-USERAUTH] 用于向服務(wù)器提供客戶(hù)端用戶(hù)鑒別功能央拖。它運(yùn)行在傳輸層協(xié)議 SSH-TRANS 上面祭阀。當(dāng) SSH-USERAUTH 開(kāi)始后,它從低層協(xié)議那里接收會(huì)話(huà)標(biāo)識(shí)符(從第一次密鑰交換中的交換哈希 H )鲜戒。會(huì)話(huà)標(biāo)識(shí)符唯一標(biāo)識(shí)此會(huì)話(huà)并且適用于標(biāo)記以證明私鑰的所有權(quán)专控。 SSH-USERAUTH 也需要知道低層協(xié)議是否提供保密性保護(hù)。
-
連接協(xié)議 [SSH-CONNECT] 將多個(gè)加密隧道分成邏輯通道袍啡。它運(yùn)行在用戶(hù)認(rèn)證協(xié)議上踩官。它提供了交互式登錄話(huà)路、遠(yuǎn)程命令執(zhí)行境输、轉(zhuǎn)發(fā) TCP/IP 連接和轉(zhuǎn)發(fā) X11 連接蔗牡。
一旦建立一個(gè)安全傳輸層連接,客戶(hù)機(jī)就發(fā)送一個(gè)服務(wù)請(qǐng)求嗅剖。當(dāng)用戶(hù)認(rèn)證完成之后辩越,會(huì)發(fā)送第二個(gè)服務(wù)請(qǐng)求。這樣就允許新定義的協(xié)議可以與上述協(xié)議共存信粮。連接協(xié)議提供了用途廣泛的各種通道黔攒,有標(biāo)準(zhǔn)的方法用于建立安全交互式會(huì)話(huà)外殼和轉(zhuǎn)發(fā)(“隧道技術(shù)”)專(zhuān)有 TCP/IP 端口和 X11 連接。
通過(guò)使用SSH,你可以把所有傳輸?shù)臄?shù)據(jù)進(jìn)行加密督惰,這樣"中間人"這種攻擊方式就不可能實(shí)現(xiàn)了不傅,而且也能夠防止DNS欺騙和IP欺騙。使用SSH赏胚,還有一個(gè)額外的好處就是傳輸?shù)臄?shù)據(jù)是經(jīng)過(guò)壓縮的访娶,所以可以加快傳輸?shù)乃俣取SH有很多功能觉阅,它既可以代替Telnet崖疤,又可以為FTP、PoP典勇、甚至為PPP提供一個(gè)安全的"通道"劫哼。
- 傳輸層協(xié)議(The Transport Layer Protocol)提供服務(wù)器認(rèn)證,數(shù)據(jù)機(jī)密性割笙,信息完整性 等的支持权烧;
- 用戶(hù)認(rèn)證協(xié)議(The User Authentication Protocol) 則為服務(wù)器提供客戶(hù)端的身份鑒別;
- 連接協(xié)議(The Connection Protocol) 將加密的信息隧道復(fù)用成若干個(gè)邏輯通道咳蔚,提供給更高層的應(yīng)用協(xié)議使用豪嚎; 各種高層應(yīng)用協(xié)議可以相對(duì)地獨(dú)立于SSH基本體系之外,并依靠這個(gè)基本框架谈火,通過(guò)連接協(xié)議使用SSH的安全機(jī)制侈询。
同時(shí)SSH協(xié)議框架中還為許多高層的網(wǎng)絡(luò)安全應(yīng)用協(xié)議提供擴(kuò)展的支持。它們之間的層次關(guān)系可以用如下圖來(lái)表示:
認(rèn)證方式
- 基于口令的認(rèn)證:這個(gè)就不用說(shuō)了糯耍,就是輸入用戶(hù)名和密碼
- 基于密鑰的認(rèn)證扔字,具體步驟如下:
(1).客戶(hù)端建立兩把鑰匙(公鑰與私鑰)
(2).將公鑰數(shù)據(jù)上傳到服務(wù)器上
(3).將公鑰放置服務(wù)器端的正確目錄與文件名(scp 或 ssh-copy-id)
對(duì)于SSH這樣以提供安全通訊為目標(biāo)的協(xié)議,其中必不可少的就是一套完備的密鑰機(jī)制温技。由于SSH協(xié)議是面向互聯(lián)網(wǎng)網(wǎng)絡(luò)中主機(jī)之間的互訪與信息交換革为,所以主機(jī)密鑰成為基本的密鑰機(jī)制。也就是說(shuō)舵鳞,SSH協(xié)議要求每一個(gè)使用本協(xié)議的主機(jī)都必須至少有一個(gè)自己的主機(jī)密鑰對(duì)震檩,服務(wù)方通過(guò)對(duì)客戶(hù)方主機(jī)密鑰的認(rèn)證之后,才能允許其連接請(qǐng)求蜓堕。一個(gè)主機(jī)可以使用多個(gè)密鑰抛虏,針對(duì)不同的密鑰算法而擁有不同的密鑰,但是至少有一種是必備的套才,即通過(guò) DSS算法產(chǎn)生的密鑰迂猴。關(guān)于DSS算法,請(qǐng)參考FIPS-186 文檔.SSH協(xié)議關(guān)于主機(jī)密鑰認(rèn)證的管理方案有兩種背伴,如下圖所示:
每一個(gè)主機(jī)都必須有自己的主機(jī)密鑰沸毁,密鑰可以有多對(duì)峰髓,每一對(duì)主機(jī)密鑰對(duì)包括公開(kāi)密鑰和私有密鑰。在實(shí)際應(yīng)用過(guò)程中怎樣使用這些密鑰息尺,并依賴(lài)它們來(lái)實(shí)現(xiàn)安全特性呢携兵?如上圖所示,SSH協(xié)議框架中提出了兩種方案掷倔。
在第一種方案中眉孩,主機(jī)將自己的公用密鑰分發(fā)給相關(guān)的客戶(hù)機(jī),客戶(hù)機(jī)在訪問(wèn)主機(jī)時(shí)則使用該主機(jī)的公開(kāi)密鑰來(lái)加密數(shù)據(jù)勒葱,主機(jī)則使用自己的私有密鑰來(lái)解密數(shù)據(jù),從而實(shí)現(xiàn)主機(jī)密鑰認(rèn)證巴柿,確定客戶(hù)機(jī)的可靠身份凛虽。在圖2(a)中可以看到,用戶(hù)從主機(jī)A上發(fā)起操作广恢,去訪問(wèn),主機(jī)B和主機(jī)C,此時(shí)俏竞,A成為客戶(hù)機(jī)篷朵,它必須事先配置主機(jī)B和主機(jī)C的公開(kāi)密鑰,在訪問(wèn)的時(shí)候根據(jù)主機(jī)名來(lái)查找相應(yīng)的公開(kāi)密鑰糠聪。對(duì)于被訪問(wèn)主機(jī)(也就是服務(wù)器端)來(lái)說(shuō)則只要保證安全地存儲(chǔ)自己的私有密鑰就可以了荒椭。
在第二種方案中舰蟆,存在一個(gè)密鑰認(rèn)證中心趣惠,所有系統(tǒng)中提供服務(wù)的主機(jī)都將自己的公開(kāi)密鑰提交給認(rèn)證中心,而任何作為客戶(hù)機(jī)的主機(jī)則只要保存一份認(rèn)證中心的公開(kāi)密鑰就可以了身害。在這種模式下味悄,客戶(hù)機(jī)在訪問(wèn)服務(wù)器主機(jī)之前,還必須向密鑰認(rèn)證中心請(qǐng)求認(rèn)證塌鸯,認(rèn)證之后才能夠正確地連接到目的主機(jī)上侍瑟。
很顯然,第一種方式比較容易實(shí)現(xiàn)丙猬,但是客戶(hù)機(jī)關(guān)于密鑰的維護(hù)卻是個(gè)麻煩事涨颜,因?yàn)槊看巫兏急仨氃诳蛻?hù)機(jī)上有所體現(xiàn);第二種方式比較完美地解決管理維護(hù)問(wèn)題淮悼,然而這樣的模式對(duì)認(rèn)證中心的要求很高咐低,在互聯(lián)網(wǎng)絡(luò)上要實(shí)現(xiàn)這樣的集中認(rèn)證,單單是權(quán)威機(jī)構(gòu)的確定就是個(gè)大麻煩袜腥,有誰(shuí)能夠什么都能說(shuō)了算呢见擦?但是從長(zhǎng)遠(yuǎn)的發(fā)展來(lái)看钉汗,在企業(yè)應(yīng)用和商業(yè)應(yīng)用領(lǐng)域,采用中心認(rèn)證的方案是必要的鲤屡。
另外损痰,SSH協(xié)議框架中還允許對(duì)主機(jī)密鑰的一個(gè)折中處理,那就是首次訪問(wèn)免認(rèn)證酒来。首次訪問(wèn)免認(rèn)證是指卢未,在某客戶(hù)機(jī)第一次訪問(wèn)主機(jī)時(shí),主機(jī)不檢查主機(jī)密鑰堰汉,而向該客戶(hù)都發(fā)放一個(gè)公開(kāi)密鑰的拷貝辽社,這樣在以后的訪問(wèn)中則必須使用該密鑰,否則會(huì)被認(rèn)為非法而拒絕其訪問(wèn)翘鸭。
工作過(guò)程
在整個(gè)通訊過(guò)程中滴铅,為實(shí)現(xiàn) SSH的安全連接,服務(wù)器端與客戶(hù)端要經(jīng)歷如下五個(gè)階段:
* 版本號(hào)協(xié)商階段就乓,SSH目前包括 SSH1和SSH2兩個(gè)版本汉匙, 雙方通過(guò)版本協(xié)商確定使用的版本
* 密鑰和算法協(xié)商階段,SSH支持多種加密算法生蚁, 雙方根據(jù)本端和對(duì)端支持的算法噩翠,協(xié)商出最終使用的算法
* 認(rèn)證階段,SSH客戶(hù)端向服務(wù)器端發(fā)起認(rèn)證請(qǐng)求邦投, 服務(wù)器端對(duì)客戶(hù)端進(jìn)行認(rèn)證
* 會(huì)話(huà)請(qǐng)求階段伤锚, 認(rèn)證通過(guò)后,客戶(hù)端向服務(wù)器端發(fā)送會(huì)話(huà)請(qǐng)求
* 交互會(huì)話(huà)階段 尼摹,會(huì)話(huà)請(qǐng)求通過(guò)后见芹,服務(wù)器端和客戶(hù)端進(jìn)行信息的交互
-
版本號(hào)協(xié)商階段
1. 服務(wù)器打開(kāi)端口 22,等待客戶(hù)端連接蠢涝。
2. 客戶(hù)端向服務(wù)器端發(fā)起 TCP初始連接請(qǐng)求玄呛,TCP連接建立后,服務(wù)器向客戶(hù)端發(fā)送第一個(gè)報(bào)文和二,包括版本標(biāo)志字符串徘铝,格式為“SSH-<主協(xié)議版本號(hào)>.<次協(xié)議版本號(hào)>-<軟件版本號(hào)>”,協(xié)議版本號(hào)由主版本號(hào)和次版本號(hào)組成惯吕,軟件版本號(hào)主要是為調(diào)試使用惕它。
3. 客戶(hù)端收到報(bào)文后,解析該數(shù)據(jù)包废登,如果服務(wù)器端的協(xié)議版本號(hào)比自己的低淹魄,且客戶(hù)端能支持服務(wù)器端的低版本,就使用服務(wù)器端的低版本協(xié)議號(hào)堡距,否則使用自己的協(xié)議版本號(hào)甲锡。
4. 客戶(hù)端回應(yīng)服務(wù)器一個(gè)報(bào)文兆蕉,包含了客戶(hù)端決定使用的協(xié)議版本號(hào)。服務(wù)器比較客戶(hù)端發(fā)來(lái)的版本號(hào)缤沦,決定是否能同客戶(hù)端一起工作虎韵。
5. 如果協(xié)商成功,則進(jìn)入密鑰和算法協(xié)商階段缸废,否則服務(wù)器端斷開(kāi) TCP連接包蓝。
Note: 版本號(hào)協(xié)商階段報(bào)文都是采用明文方式傳輸?shù)摹?/p>
-
密鑰和算法協(xié)商階段
1. 服務(wù)器端和客戶(hù)端分別發(fā)送算法協(xié)商報(bào)文給對(duì)端,報(bào)文中包含自己支持的公鑰算法列表企量、加密算法列表测萎、MAC(Message Authentication Code,消息驗(yàn)證碼)算法列表梁钾、壓縮算法列表等;
2. 服務(wù)器端和客戶(hù)端根據(jù)對(duì)端和本端支持的算法列表得出最終使用的算法绳泉。
3. 服務(wù)器端和客戶(hù)端利用 DH交換(Diffie-Hellman Exchange)算法、主機(jī)密鑰對(duì)等參數(shù)姆泻,生成會(huì)話(huà)密鑰和會(huì)話(huà) ID。通過(guò)以上步驟冒嫡,服務(wù)器端和客戶(hù)端就取得了相同的會(huì)話(huà)密鑰和會(huì)話(huà)ID拇勃。 * 對(duì)于后續(xù)傳輸?shù)臄?shù)據(jù),兩端都會(huì)使用會(huì)話(huà)密鑰進(jìn)行加密和解密孝凌,保證了數(shù)據(jù)傳送的安全 * 在認(rèn)證階段方咆,兩端會(huì)使用會(huì)話(huà) ID用于認(rèn)證過(guò)程。
Note:
在協(xié)商階段之前蟀架,服務(wù)器端已經(jīng)生成 RSA或 DSA密鑰對(duì)瓣赂,他們主要用于參與會(huì)話(huà)密鑰的生成。
-
認(rèn)證階段
1. 客戶(hù)端向服務(wù)器端發(fā)送認(rèn)證請(qǐng)求片拍,認(rèn)證請(qǐng)求中包含用戶(hù)名煌集、認(rèn)證方法、與該認(rèn)證方法相關(guān)的內(nèi)容(如:password認(rèn)證時(shí)捌省,內(nèi)容為密碼)苫纤。
2. 服務(wù)器端對(duì)客戶(hù)端進(jìn)行認(rèn)證,如果認(rèn)證失敗纲缓,則向客戶(hù)端發(fā)送認(rèn)證失敗消息卷拘,其中包含可以再次認(rèn)證的方法列表。
3. 客戶(hù)端從認(rèn)證方法列表中選取一種認(rèn)證方法再次進(jìn)行認(rèn)證祝高。
4. 該過(guò)程反復(fù)進(jìn)行栗弟, 直到認(rèn)證成功或者認(rèn)證次數(shù)達(dá)到上限, 服務(wù)器關(guān)閉連接為止工闺。
SSH提供兩種認(rèn)證方式:
1. password認(rèn)證:客戶(hù)端向服務(wù)器發(fā)出 password認(rèn)證請(qǐng)求乍赫,將用戶(hù)名和密碼加密后發(fā)送給服務(wù)器瓣蛀;服務(wù)器將該信息解密后得到用戶(hù)名和密碼的明文,與設(shè)備上保存的用戶(hù)名和密碼進(jìn)行比較耿焊,并返回認(rèn)證成功或失敗的消息揪惦。
2. publickey 認(rèn)證:采用數(shù)字簽名的方法來(lái)認(rèn)證客戶(hù)端。目前罗侯,設(shè)備上可以利用RSA和 DSA兩種公共密鑰算法實(shí)現(xiàn)數(shù)字簽名器腋。客戶(hù)端發(fā)送包含用戶(hù)名钩杰、公共密鑰和公共密鑰算法的 publickey 認(rèn)證請(qǐng)求給服務(wù)器端纫塌。服務(wù)器對(duì)公鑰進(jìn)行合法性檢查,如果不合法讲弄,則直接發(fā)送失敗消息措左;否則,服務(wù)器利用數(shù)字簽名對(duì)客戶(hù)端進(jìn)行認(rèn)證避除,并返回認(rèn)證成功或失敗的消息
SSH2.0還提供了 password-publickey 認(rèn)證和 any 認(rèn)證:
1. password-publickey 認(rèn)證:指定該用戶(hù)的認(rèn)證方式為 password 和 publickey認(rèn)證同時(shí)滿(mǎn)足怎披。客戶(hù)端版本為 SSH1的用戶(hù)只要通過(guò)其中一種認(rèn)證即可登錄瓶摆;客戶(hù)端版本為 SSH2的用戶(hù)必須兩種認(rèn)證都通過(guò)才能登錄凉逛。
2. any認(rèn)證:指定該用戶(hù)的認(rèn)證方式可以是 password,也可以是 publickey群井。
-
會(huì)話(huà)請(qǐng)求階段
- 服務(wù)器等待客戶(hù)端的請(qǐng)求状飞;
- 認(rèn)證通過(guò)后,客戶(hù)端向服務(wù)器發(fā)送會(huì)話(huà)請(qǐng)求书斜;
- 服務(wù)器處理客戶(hù)端的請(qǐng)求诬辈。請(qǐng)求被成功處理后, 服務(wù)器會(huì)向客戶(hù)端回應(yīng) SSH_SMSG_SUCCESS包荐吉,SSH進(jìn)入交互會(huì)話(huà)階段焙糟;否則回應(yīng) SSH_SMSG_FAILURE包,表示服務(wù)器處理請(qǐng)求失敗或者不能識(shí)別請(qǐng)求稍坯。
交互會(huì)話(huà)階段
在這個(gè)模式下酬荞,數(shù)據(jù)被雙向傳送:
1. 客戶(hù)端將要執(zhí)行的命令加密后傳給服務(wù)器;
2. 服務(wù)器接收到報(bào)文,解密后執(zhí)行該命令,將執(zhí)行的結(jié)果加密發(fā)還給客戶(hù)端;
3. 客戶(hù)端將接收到的結(jié)果解密后顯示到終端上.
SSH Q&A
Q1: SSH的版本和區(qū)別瞧哟。
SSH2避免了RSA的專(zhuān)利問(wèn)題混巧,并修補(bǔ)了CRC的缺陷。SSH2用數(shù)字簽名算法(DSA)和Diffie-Hellman(DH)算法代替RSA來(lái)完成對(duì)稱(chēng)密鑰的交換勤揩,用HMAC來(lái)代替CRC咧党。同時(shí)SSH2增加了AES和Twofish等對(duì)稱(chēng)加密算法。
A1: SSH(Secure SHell)到目前為止有兩個(gè)不兼容的版本——SSH1和SSH2陨亡。SSH1又分為1.3和1.5兩個(gè)版本傍衡。SSH1采用DES深员、3DES、 Blowfish和RC4等對(duì)稱(chēng)加密算法保護(hù)數(shù)據(jù)安全傳輸蛙埂,而對(duì)稱(chēng)加密算法的密鑰是通過(guò)非對(duì)稱(chēng)加密算法(RSA)來(lái)完成交換的倦畅。SSH1使用循環(huán)冗余校驗(yàn)碼(CRC)來(lái)保證數(shù)據(jù)的完整性,但是后來(lái)發(fā)現(xiàn)這種方法有缺陷绣的。
更多內(nèi)容請(qǐng)參考The SSHv1 Protocol & The SSHv2 Protocol
Q2: 什么是HMAC叠赐?
A2: HMAC(Hash Message Authentication Code) ,散列消息鑒別碼屡江,基于密鑰的Hash算法的認(rèn)證協(xié)議芭概。消息鑒別碼實(shí)現(xiàn)鑒別的原理是,用公開(kāi)函數(shù)和密鑰產(chǎn)生一個(gè)固定長(zhǎng)度的值作為認(rèn)證標(biāo)識(shí)惩嘉,用這個(gè)標(biāo)識(shí)鑒別消息的完整性罢洲。使用一個(gè)密鑰生成一個(gè)固定大小的小數(shù)據(jù)塊,即MAC文黎,并將其加入到消息中惹苗,然后傳輸。接收方利用與發(fā)送方共享的密鑰進(jìn)行鑒別認(rèn)證等耸峭。
Q3: 什么是X11 forwarding鸽粉?
A3: sh的X11 forwarding特性可以使X client和X server安全地通訊。使用X11 forwarding后抓艳,從X client到X Server方向的數(shù)據(jù)先被送至ssh server,ssh server利用和ssh client的安全通道轉(zhuǎn)發(fā)給ssh client帚戳,再由ssh client轉(zhuǎn)發(fā)給X server玷或,從X server到X client的數(shù)據(jù)流同理。這里ssh server和ssh client充當(dāng)了X client和X server間數(shù)據(jù)的轉(zhuǎn)發(fā)器片任,由于ssh server和X client偏友、ssh client和X server一般在同一臺(tái)機(jī)器上,它們之間是一種安全的進(jìn)程間通訊对供,而ssh server和ssh client間的通訊也是安全的位他,所以X client和X server間的通訊就是安全的。
Q4: 什么是TTY产场?
A4: 終端是一種字符型設(shè)備鹅髓,它有多種類(lèi)型,通常使用tty來(lái)簡(jiǎn)稱(chēng)各種類(lèi)型的終端設(shè)備京景。tty是 Teletype的縮寫(xiě)窿冯。Teletype是最早出現(xiàn)的一種終端設(shè)備,很象電傳打字機(jī)确徙,是由Teletype公司生產(chǎn)的醒串。設(shè)備名放在特殊文件目錄/dev/下执桌。
Q5: 簡(jiǎn)單描述下SSH運(yùn)行的過(guò)程?
A5:簡(jiǎn)要過(guò)程如下
* Client端向Server端發(fā)起SSH連接請(qǐng)求芜赌。
* Server端向Client端發(fā)起版本協(xié)商仰挣。
* 協(xié)商結(jié)束后Server端發(fā)送Host Key公鑰 Server Key公鑰,隨機(jī)數(shù)等信息缠沈。到這里所有通信是不加密的膘壶。
* Client端返回確認(rèn)信息,同時(shí)附帶用公鑰加密過(guò)的一個(gè)隨機(jī)數(shù)博烂,用于雙方計(jì)算Session Key香椎。
* 進(jìn)入認(rèn)證階段。從此以后所有通信均加密禽篱。
* 認(rèn)證成功后畜伐,進(jìn)入交互階段。