我們一般使用 PuTTY 等 SSH 客戶端來遠(yuǎn)程管理 Linux 服務(wù)器易迹。但是,一般的密碼方式登錄平道,容易有密碼被暴力破解的問題睹欲。所以,一般我們會將 SSH 的端口設(shè)置為默認(rèn)的 22 以外的端口,或者禁用 root 賬戶登錄窘疮。其實(shí)袋哼,有一個(gè)更好的辦法來保證安全,而且讓你可以放心地用 root 賬戶從遠(yuǎn)程登錄——那就是通過密鑰方式登錄闸衫。
密鑰形式登錄的原理是:利用密鑰生成器制作一對密鑰——一只公鑰和一只私鑰涛贯。將公鑰添加到服務(wù)器的某個(gè)賬戶上,然后在客戶端利用私鑰即可完成認(rèn)證并登錄蔚出。這樣一來弟翘,沒有私鑰,任何人都無法通過 SSH 暴力破解你的密碼來遠(yuǎn)程登錄到系統(tǒng)身冬。此外衅胀,如果將公鑰復(fù)制到其他賬戶甚至主機(jī),利用私鑰也可以登錄酥筝。
下面來講解如何在 Linux 服務(wù)器上制作密鑰對滚躯,將公鑰添加給賬戶,設(shè)置 SSH嘿歌,最后通過客戶端登錄掸掏。
1. 制作密鑰對
首先在服務(wù)器上制作密鑰對。首先用密碼登錄到你打算使用密鑰登錄的賬戶宙帝,然后執(zhí)行以下命令:
[root@host ~]$ ssh-keygen <== 建立密鑰對
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa): <== 按 Enter
Created directory '/root/.ssh'.
Enter passphrase (empty for no passphrase): <== 輸入密鑰鎖碼丧凤,或直接按 Enter 留空
Enter same passphrase again: <== 再輸入一遍密鑰鎖碼
Your identification has been saved in /root/.ssh/id_rsa. <== 私鑰
Your public key has been saved in /root/.ssh/id_rsa.pub. <== 公鑰
The key fingerprint is:
0f:d3:e7:1a:1c:bd:5c:03:f1:19:f1:22:df:9b:cc:08 root@host
密鑰鎖碼在使用私鑰時(shí)必須輸入,這樣就可以保護(hù)私鑰不被盜用步脓。當(dāng)然愿待,也可以留空,實(shí)現(xiàn)無密碼登錄靴患。
現(xiàn)在仍侥,在 root 用戶的家目錄中生成了一個(gè) .ssh 的隱藏目錄鸳君,內(nèi)含兩個(gè)密鑰文件。id_rsa 為私鑰或颊,id_rsa.pub 為公鑰。
2. 在服務(wù)器上安裝公鑰
鍵入以下命令醉顽,在服務(wù)器上安裝公鑰:
[root@host ~]$ cd .ssh
[root@host .ssh]$ cat id_rsa.pub >> authorized_keys
如此便完成了公鑰的安裝。為了確保連接成功徽鼎,請保證以下文件權(quán)限正確:
[root@host .ssh]$ chmod 600 authorized_keys
[root@host .ssh]$ chmod 700 ~/.ssh
3. 設(shè)置 SSH,打開密鑰登錄功能
編輯 /etc/ssh/sshd_config 文件否淤,進(jìn)行如下設(shè)置:
RSAAuthentication yes
PubkeyAuthentication yes
另外,請留意 root 用戶能否通過 SSH 登錄:
PermitRootLogin yes
當(dāng)你完成全部設(shè)置石抡,并以密鑰方式登錄成功后,再禁用密碼登錄:
PasswordAuthentication no
最后嚎京,重啟 SSH 服務(wù):
[root@host .ssh]$ service sshd restart
4. 將私鑰下載到客戶端,然后轉(zhuǎn)換為 PuTTY 能使用的格式
使用 WinSCP鞍帝、SFTP 等工具將私鑰文件 id_rsa 下載到客戶端機(jī)器上煞茫。然后打開 PuTTYGen,單擊 Actions 中的 Load 按鈕续徽,載入你剛才下載到的私鑰文件。如果你剛才設(shè)置了密鑰鎖碼钦扭,這時(shí)則需要輸入。
載入成功后其弊,PuTTYGen 會顯示密鑰相關(guān)的信息。在 Key comment 中鍵入對密鑰的說明信息瑞凑,然后單擊 Save private key 按鈕即可將私鑰文件存放為 PuTTY 能使用的格式。
今后,當(dāng)你使用 PuTTY 登錄時(shí)练慕,可以在左側(cè)的 Connection -> SSH -> Auth 中的 Private key file for authentication: 處選擇你的私鑰文件,然后即可登錄了铃将,過程中只需輸入密鑰鎖碼即可。
一劲阎、known_hsots
ssh會把你每個(gè)你訪問過計(jì)算機(jī)的公鑰(public key)都記錄在~/.ssh/known_hosts。當(dāng)下次訪問相同計(jì)算機(jī)時(shí)龄毡,OpenSSH會核對公鑰。如果公鑰不同沦零,OpenSSH會發(fā)出警告, 避免你受到DNS Hijack之類的攻擊路操。我在上面列出的情況,就是這種情況屯仗。
原因:一臺主機(jī)上有多個(gè)Linux系統(tǒng),會經(jīng)常切換桩撮,那么這些系統(tǒng)使用同一ip,登錄過一次后就會把ssh信息記錄在本地的~/.ssh/known_hsots文件中慌核,切換該系統(tǒng)后再用ssh訪問這臺主機(jī)就會出現(xiàn)沖突警告,需要手動(dòng)刪除修改known_hsots里面的內(nèi)容垫桂。
有以下兩個(gè)解決方案:
- 手動(dòng)刪除修改known_hsots里面的內(nèi)容;
- 修改配置文件“~/.ssh/config”诬滩,加上這兩行灭将,重啟服務(wù)器。
StrictHostKeyChecking no
UserKnownHostsFile /dev/null
優(yōu)缺點(diǎn):
- 需要每次手動(dòng)刪除文件內(nèi)容庙曙,一些自動(dòng)化腳本的無法運(yùn)行(在SSH登陸時(shí)失敗)捌朴,但是安全性高;
- SSH登陸時(shí)會忽略known_hsots的訪問洼怔,但是安全性低;
二左驾、authorized_keys
1极谊、就是為了讓兩個(gè)linux機(jī)器之間使用ssh不需要用戶名和密碼安岂。采用了數(shù)字簽名RSA或者DSA來完成這個(gè)操作
2、模型分析
假設(shè) A (192.168.20.59)為客戶機(jī)器嗜闻,B(192.168.20.60)為目標(biāo)機(jī);
要達(dá)到的目的:
A機(jī)器ssh登錄B機(jī)器無需輸入密碼琉雳;
加密方式選 rsa|dsa均可以,默認(rèn)dsa
單向登陸的操作過程(能滿足上邊的目的):
1檐束、登錄A機(jī)器
2、ssh-keygen -t [rsa|dsa]被丧,將會生成密鑰文件和私鑰文件 id_rsa,id_rsa.pub或id_dsa,id_dsa.pub
3、將 .pub 文件復(fù)制到B機(jī)器的 .ssh 目錄甥桂, 并 cat id_dsa.pub >> ~/.ssh/authorized_keys
4、大功告成黄选,從A機(jī)器登錄B機(jī)器的目標(biāo)賬戶婶肩,不再需要密碼了;(直接運(yùn)行 #ssh 192.168.20.60 )
雙向登陸的操作過程:
1律歼、ssh-keygen做密碼驗(yàn)證可以使在向?qū)Ψ綑C(jī)器上ssh ,scp不用使用密碼.具體方法如下:
2、兩個(gè)節(jié)點(diǎn)都執(zhí)行操作:#ssh-keygen -t rsa
然后全部回車,采用默認(rèn)值.
3险毁、這樣生成了一對密鑰,存放在用戶目錄的~/.ssh下离唐。
將公鑰考到對方機(jī)器的用戶目錄下,并將其復(fù)制到~/.ssh/authorized_keys中(操作命令:#cat id_dsa.pub >> ~/.ssh/authorized_keys)。
二完沪、id_rsa嵌戈、id_rsa.pub
上班的第一天听皿,上司大哥都會說:待會給我發(fā)個(gè)公鑰吧。
這里說的公鑰其實(shí)就是id_rsa.pub尉姨。
上司大哥是要把我們的客戶端公鑰上傳到服務(wù)器,然后再把這個(gè)客戶端公鑰添加到authorized_keys又厉。添加后,服務(wù)器就會認(rèn)為你這個(gè)客戶端為可信任覆致。你則可以訪問這個(gè)服務(wù)器了。
獲取id_rsa.pub
終端輸入
ssh-keygen
1
一路回車煌妈,最后會看到一個(gè)矩形的圖案。
你這時(shí)ls是看不到.ssh文件夾的璧诵。
cd .ssh/
1
這樣就會切換到.ssh,再ls
就會看到id_rsa 和id_rsa.pub
open ./
1
就會打開這個(gè)文件夾了之宿。
現(xiàn)在你可以發(fā)id_rsa.pub給你的上司大哥了。