關於 web service, unity, blogger 等軟體工程筆記

如何設定 Linux 使用 SSH Key-based 登入驗證方式,使用 PuTTY 登入 Linux 伺服器

Edit icon 沒有留言
Linux

最近公司架台內部使用的 Linux 機器,原先是輸入 MIS 所設定的帳號密碼登入,但保管帳號密碼顯得有點難以記憶,因此想到可以使用公開金鑰認證 (Public Key Authentication) 方式,不用輸入密碼而是提供私密金鑰來進行登入。

建立一組金鑰

提示:個人在 Windows 10 進行設定,以下命令列經由 where program_name 查詢,均是經由安裝 Git,其 bin 所提供…

先本機端輸入指令建立金鑰:

ssh-keygen

依照指令提示輸入檔名 (Windows 會將金鑰建立在當前目前目錄下):

Generating public/private rsa key pair.
Enter file in which to save the key (//.ssh/id_rsa)

輸入是否有密碼保護,直接按 Enter 表示私密金鑰不加密 (Private Key):

Enter passphrase (empty for no passphrase):
Enter same passphrase again:

完成建立出現的訊息:

Your identification has been saved in server.
Your public key has been saved in server.pub.
The key fingerprint is:
c0:6e:89:4a:ad:85:ea:fc:4a:c9:ff:08:81:95:b5:99 user@Twsiyuan
The key's randomart image is:
+--[ RSA 2048]----+
|    .            |
|   o =           |
|  o E o          |
|.. o o o         |
|..o + + S        |
|.oo+ .           |
|.=o              |
|+ o .            |
| +o+..           |
+-----------------+

假設檔名輸入為 server,產生 server 以及 server.pub,因為副檔名個人偏好,手動將 server 改名為 server.pem。

金鑰複製到遠端 Linux

提示:或是在遠端伺服器建立金鑰,然後將用於登入的私密金鑰複製到本機端

複製公開金鑰 (Public Key) 到遠端 Linux 伺服器,考慮以下指令,username 以及 remote_host 替換成登入的帳號以及遠端伺服器的位置:

cat server.pub | ssh username@remote_host "mkdir ~/.ssh && cat >> ~/.ssh/authorized_keys"

會要求先輸入密碼登入,登入完成才會將公開金鑰複製到遠端伺服器。

通常經過複製後,就可以跳到一節,使用私密金鑰進行登入嘗試。若依然發生錯誤,則需要使用密碼登入遠端伺服器,查看編輯 ssh 設定:

sudo vi /etc/ssh/sshd_config

確認有開啟公開金鑰認證登入方式,

PubkeyAuthentication yes

以及可用的公開金鑰檔名位置為以下:

AuthorizedKeysFile      .ssh/authorized_keys

甚至關閉密碼認證登入,改成僅允許金鑰認證,避免惡意猜密碼攻擊:

PasswordAuthentication no
PubkeyAuthentication yes

修改完設定後,若使用 CentOS 7.0 以下版本,輸入以下指令重新啟動 ssh 登入服務:

sudo service sshd restart

如果在 CentOS 7.0 以上的版本:

sudo sysemctl restart sshd.service

使用私密金鑰登入

ssh 登入採用私密金鑰:

ssh -i "server.pem" username@remote_host

如果是在 Windows 使用 PuTTY,首先先將 server.pem 換成 server.ppk,開啟 PuTTYgen,點選 load 按鈕載入 server.pem。

載入 server.pem 的私密金鑰

載入 server.pem 的私密金鑰

確認 key 類型為 RSA,按下 Save private key 儲存私密金鑰為 server.ppk:

儲存私密金鑰

儲存私密金鑰

接著開啟 PuTTY,在 Category > Session 填入登入帳號與遠端伺服器位置:

設定遠端登入伺服器與帳號

設定遠端登入伺服器與帳號

Category > Connection > Auth 設定私密金鑰檔案位置:

設定私密金鑰檔案位置

設定私密金鑰檔案位置

之後直接按下 Open 便可利用私密金鑰登入伺服器。但每次設定有點麻煩,可以回到 Category > Session,將目前設置儲存:

設定名稱,儲存 Session

設定名稱,儲存 Session

之後滑鼠點擊該 Session 便可以直接套用之前的設定,直接進行登入驗證。

Reference

沒有留言: