設定 Linux SSH 使用金鑰登入

最後更新 2021-08-04 作者 Roy

我們一般使用 PuTTY、Xshell 等 SSH 客戶端來遠端管理 Linux 服務器。

但是,一般的密碼方式登錄,容易有密碼被暴力破解的問題。所以,一般我們會將 SSH 的端口預設的 22 改成其他端口,或者禁用 root 帳號登錄。

其實,有一個更好的辦法來保證安全,而且讓你可以放心地用 root 帳號從遠端登錄,那就是通過密鑰方式登錄。
密鑰形式登錄的原理是:利用密鑰生成器制作一對密鑰一只公鑰和一只私鑰。將公鑰添加到服務器的某個帳號上,然後在客戶端利用私鑰即可完成認證並登錄。這樣一來,沒有私鑰,任何人都無法通過 SSH 暴力破解你的密碼來遠程登錄到系統。此外,如果將公鑰複製到其他帳號甚至主機,利用私鑰也可以登入。

Step 1 建立金鑰

[root@xxx ~]$ ssh-keygen

Setp 2 出現下面這段直接按Enter

Enter file in which to save the key (/root/.ssh/id_rsa): 

Setp 3 出現下面這段是要輸入金鑰的密碼鎖,可以直接按Enter留空實現無密碼登入

[root@xxx ~]$ Enter passphrase (empty for no passphrase):

Setp 4 再次輸入金鑰的密碼鎖

[root@xxx ~]$ Enter same passphrase again:

現在在root用戶的目錄生成了一個.ssh的隱藏目錄,裡面包含兩個金鑰。id_rsa是私鑰,id_rsa.pub是公鑰。

Setp 5 在伺服器安裝公鑰

[root@xxx ~]$ cd .ssh
[root@xxx .ssh]$ cat id_rsa.pub >> authorized_keys

Setp 6 完成公鑰安裝,為了確保權限正確,所以進行以下設定

 [root@xxx .ssh]$ chmod 600 authorized_keys
[root@xxx .ssh]$ chmod 700 ~/.ssh

Setp 7 將私鑰下載到客戶端, 然後轉成putty可使用的格式

將金鑰複製到home路徑 cp .ssh/id_rsa /home/

使用 WinSCP、SFTP 等工具將私鑰文件 id_rsa 下載到客戶端機器上。然後打開 PuTTYGen,單擊 Actions 中的 Load 按鈕,載入你剛才下載到的私鑰文件。如果你剛才設置了密鑰鎖碼,這時則需要輸入。
載入成功後,PuTTYGen 會顯示密鑰相關的訊息。在 Key comment 中鍵入對密鑰的說明信息,然後單擊 Save private key 按鈕即可將私鑰文件存放為 PuTTY 能使用的格式。
今後,當你使用 PuTTY 登錄時,可以在左側的 Connection -> SSH -> Auth 中的 Private key file for authentication: 處選擇你的私鑰文件,然後即可登錄了,過程中只需輸入密鑰鎖碼即可。

Setp 8 設定SSH,開啟金鑰登入功能

 编辑 /etc/ssh/sshd_config 文件,进行如下设置:
RSAAuthentication yes
PubkeyAuthentication yes
另外,请留意 root 用户能否通过 SSH 登录:
PermitRootLogin yes
当你完成全部设置,并以密钥方式登录成功后,再禁用密码登录:
PasswordAuthentication no

Setp 9 設定完成後,重啟SSH服務。

PS: centos7以前的版本使用第一個,centos7 以後使用第二個指令。

[root@host .ssh]$ service sshd restart
[root@host .ssh]$ systemctl restart sshd.service

Roy
關於作者 Roy

曾經北漂的工程師,現在專注於WordPress、.Net Core開發


發佈留言