天天看點

centos(18)-putty/winscp實作ssh密鑰登入

在第3篇,我講過用putty/winscp輸入使用者名/密碼,遠端登入伺服器,這種登入方式存在一些安全隐患。而本篇講的密鑰登入是一種安全性别更高的登入方式。關于密鑰及其他本篇講到的一些安全性知識概念,參考web安全 (1)。

ssh密碼登入

linux遠端連接配接是使用的ssh,和https有點類似,流程如下:

1.伺服器開啟時預設會打開ssh服務,ssh服務會檢測伺服器私鑰/公鑰,如果不存在就自動生成。

2.使用者請求連接配接伺服器。

3.伺服器發送公鑰給用戶端。我在第3篇講過,如果使用者是第一次連接配接伺服器,會彈出一個視窗。提示大意是收到了來自伺服器的公鑰,而且它是未知的,是否信任它?如果選是,會将這個公鑰儲存在用戶端,以後再次登入時,将新收到的公鑰和之前的對比一緻,說明它是可信的,不再彈出提示。如果和之前的不一緻,可能是伺服器修改了密鑰,或者遇到了黑客。此時也會有提示:

centos(18)-putty/winscp實作ssh密鑰登入

4.用戶端生成對稱密鑰,使用伺服器的公鑰加密,發給伺服器。

5.伺服器用自己的私鑰解密,拿到對稱密鑰。

6.安全通道建立,用戶端和伺服器使用對稱密鑰完成登入和通信。

以上過程看似安全,但仍然有隐患:

1.我在web安全 (1)中講過,公鑰配置設定并不是安全的,是以如何保證用戶端第一次拿到公鑰是真實的?這一點最後再講。

2.密碼雖然加了密,但隻要開放了密碼登入,就存在被黑客攻破的可能性。而ssh密鑰登入就是要關閉密碼登入。

ssh密鑰登入

使用者生成一對公鑰/私鑰,公鑰放在伺服器,私鑰放在用戶端。每次登入通過公鑰和私鑰進行認證,而不再使用密碼。如下:

生成公鑰/私鑰

這裡用root登入伺服器,執行生成密鑰指令:ssh-keygen -t rsa

rsa是現在主流的非對稱加密算法,執行過程中途會問你密鑰儲存位置,以及是否需要密碼,如果設了密碼以後提取密鑰的時候都需要輸入密碼,如果密鑰被盜,而對方不知道密碼将無法正常使用密鑰。這裡全部回車跳過,全預設不設密碼。預設會将公鑰/私鑰儲存在目前使用者的.ssh即/root/.ssh/目錄下。

centos(18)-putty/winscp實作ssh密鑰登入

伺服器公鑰配置

上圖最後一條指令:cat ./.ssh/id_rsa.pub >> ./.ssh/authorized_keys

将生成的公鑰檔案id_rsa.pub的内容,寫入/root/.ssh/authorized_keys檔案中,密鑰登入時,伺服器就是用目前使用者.ssh目錄下的authorized_keys檔案進行認證的。登入其他使用者也是一樣。

用戶端私鑰配置(winscp)

用戶端以winscp為例,将上面生成的私鑰檔案/root/.ssh/id_rsa複制到window中來。在登入winscp時選擇進階,如下配置:

centos(18)-putty/winscp實作ssh密鑰登入
centos(18)-putty/winscp實作ssh密鑰登入

上圖右下角選擇你的id_rsa私鑰檔案,檔案類型選擇全部才能看到,會彈出以下提示,确定轉換格式并會儲存為id_rsa.ppk檔案,如上紅框密鑰檔案處。私鑰配置完畢。

centos(18)-putty/winscp實作ssh密鑰登入

winscp密鑰登入

此時,不需要輸入密碼,直接用root登入winscp,會提示公鑰認證,如下

centos(18)-putty/winscp實作ssh密鑰登入

我在第3篇綁定了winscp和putty,此時會自動用密鑰登入綁定的putty

centos(18)-putty/winscp實作ssh密鑰登入

putty密鑰登入配置

如果要單獨登入putty,配置如下

centos(18)-putty/winscp實作ssh密鑰登入

密鑰登入流程

1.用戶端請求連接配接,伺服器配置設定公鑰,這個過程和上面ssh密碼登入一樣,這裡省略。

2.用戶端請求使用密鑰登入。

3.伺服器生成随機字元串,使用使用者的公鑰加密,發給用戶端。

4.用戶端用自己的私鑰解密随機字元串,生成md5散列值,發回給伺服器。

5.伺服器用原始随機字元串同樣生成md5散列值,與用戶端的比對一緻,認證登入成功。

以上過程中,不需要輸入密碼,而一次性的随機數即使洩露了也沒有任何意義。

關閉密碼登入

修改/etc/ssh/sshd_config檔案,将其中PasswordAuthentication 參數從yes改為no:PasswordAuthentication no

執行指令重新開機ssh服務:systemctl restart sshd

第一次登入的問題

ssh不像https有證書,是以如何保證第一次登入的安全性?

第一次登入時,伺服器上通常什麼資料也沒有,此時并沒有多大風險,而且有足夠的時間檢查你所連接配接的伺服器是否真實,以及檢查是否有人登入過,曾經執行過的指令曆史等。假如真的有黑客在第一次入侵,可以參考我在第11篇講的方法,找到他的id,執行kill,立即修改密碼。然後建立密鑰登入方式,關閉密碼登入。此時即使第一次登入的密碼洩露了也沒事。

繼續閱讀