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