SSH基本原理和免密碼登錄
SSH 為 Secure Shell 的縮寫(xiě),由 IETF 的網(wǎng)絡(luò)工作小組(Network Working Group)所制定;SSH 為建立在應(yīng)用層和傳輸層基礎(chǔ)上的安全協(xié)議。SSH 是目前較可靠,專(zhuān)為遠(yuǎn)程登錄會(huì)話和其他網(wǎng)絡(luò)服務(wù)提供安全性的協(xié)議。利用SSH 協(xié)議可以有效防止遠(yuǎn)程管理過(guò)程中的信息泄露問(wèn)題。SSH最初是UNIX系統(tǒng)上的一個(gè)程序,后來(lái)又迅速擴(kuò)展到其他操作平臺(tái)。SSH在正確使用時(shí)可彌補(bǔ)網(wǎng)絡(luò)中的漏洞。SSH客戶(hù)端適用于多種平臺(tái)。
從客戶(hù)端來(lái)看,SSH提供兩種級(jí)別的安全驗(yàn)證:
第一種級(jí)別是基于口令的安全驗(yàn)證
只要你知道自己帳號(hào)和口令,就可以登錄到遠(yuǎn)程主機(jī)。所有傳輸?shù)臄?shù)據(jù)都會(huì)被加密, 但是不能保證你正在連接的服務(wù)器就是你想連接的服務(wù)器。這個(gè)過(guò)程如下:
(1)遠(yuǎn)程主機(jī)收到用戶(hù)的登錄請(qǐng)求,把自己的公鑰發(fā)給用戶(hù)。
(2)用戶(hù)使用這個(gè)公鑰,將登錄密碼加密后,發(fā)送回來(lái)。
(3)遠(yuǎn)程主機(jī)用自己的私鑰,解密登錄密碼,如果密碼正確,就同意用戶(hù)登錄。這種方式可能會(huì)有別的服務(wù)器在冒充真正的服務(wù)器,將公鑰發(fā)送給客戶(hù)端,客戶(hù)端就會(huì)將密碼加密后發(fā)送給冒充的服務(wù)器,冒充的服務(wù)器就可以拿自己的私鑰獲取到密碼,也就是受到“中間人”這種方式的攻擊。
值得一說(shuō)的是當(dāng)?shù)谝淮捂溄舆h(yuǎn)程主機(jī)時(shí),會(huì)提示您當(dāng)前主機(jī)的”公鑰指紋”,詢(xún)問(wèn)您是否繼續(xù),如果選擇繼續(xù)后就可以輸入密碼進(jìn)行登錄了,當(dāng)遠(yuǎn)程的主機(jī)接受以后,該臺(tái)服務(wù)器的公鑰就會(huì)保存到~/.ssh/known_hosts文件中。
第二種級(jí)別是基于密匙的安全驗(yàn)證
需要依靠密匙,也就是你必須為自己創(chuàng)建一對(duì)密匙,并把公用密匙放在需要訪問(wèn)的服務(wù)器上。如果你要連接到SSH服務(wù)器上,客戶(hù)端軟件就會(huì)向服務(wù)器發(fā)出請(qǐng)求,請(qǐng)求用你的密匙進(jìn)行安全驗(yàn)證。服務(wù)器收到請(qǐng)求之后,先在該服務(wù)器上你的主目錄下尋找你的公用密匙,然后把它和你發(fā)送過(guò)來(lái)的公用密匙進(jìn)行比較。如果兩個(gè)密匙一致,服務(wù)器就用公用密匙加密“質(zhì)詢(xún)”并把它發(fā)送給客戶(hù)端軟件。客戶(hù)端軟件收到“質(zhì)詢(xún)”之后就可以用你的私人密匙解密再把它發(fā)送給服務(wù)器。用這種方式,你必須知道自己密匙的口令。但是,與第一種級(jí)別相比,第二種級(jí)別不需要在網(wǎng)絡(luò)上傳送口令。第二種級(jí)別不僅加密所有傳送的數(shù)據(jù),而且“中間人”這種攻擊方式也是不可能的(因?yàn)樗麤](méi)有你的私人密匙)。但是整個(gè)登錄的過(guò)程可能需要10秒,但是相比輸入密碼的方式來(lái)說(shuō)10秒也不長(zhǎng)。
那么如何生成自己的一對(duì)密鑰呢?打開(kāi)終端執(zhí)行ssh-keygen,該命令會(huì)在~/.ssh/目錄下創(chuàng)建id_rsa、id_rsa.pub兩個(gè)文件,分別為您的公鑰和私鑰。
將公鑰拷貝到服務(wù)器的~/.ssh/authorized_keys文件中就可以了。拷貝方法有如下幾種:
- 將公鑰通過(guò)scp拷貝到服務(wù)器上,然后追加到~/.ssh/authorized_keys文件中,這種方式比較麻煩。scp -P 22 ~/.ssh/id_rsa.pub user@host:~/。
- 通過(guò)ssh-copyid程序,ssh-copyid user@host即可,但是這種方式不支持更改端口號(hào)(我沒(méi)找到)。該程序ubuntu系統(tǒng)自帶無(wú)需安裝,其實(shí)該程序?yàn)橐粋€(gè)腳本。
- 可以通過(guò)cat ~/.ssh/id_rsa.pub | ssh -p 22 user@host ‘cat >> ~/.ssh/authorized_keys’,這個(gè)也是我比較常用的方法,因?yàn)榭梢愿亩丝谔?hào)。
當(dāng)然還有其他的一些我不知道的方法,只要好用就是好方法。
測(cè)試
如果你有遠(yuǎn)程的linux服務(wù)器,可以自己嘗試一下,如果沒(méi)有也沒(méi)關(guān)系,可以嘗試登錄自己的電腦,執(zhí)行:ssh localhost。當(dāng)然如果你沒(méi)有搭建服務(wù)器的話會(huì)提示錯(cuò)誤,執(zhí)行sudo apt-get install openssh-server安裝一個(gè)ssh-server,然后就可以使用ssh進(jìn)行登錄了。