LOGO

MIS 腳印

記錄 IT 學習的軌跡

Windows 使用 SSH 金鑰免密碼登入 Linux

如何透過 Linux 建立的公開金鑰加密 (非對稱金鑰加密),提供 Windows 7/8/10 使用 SSH Private Key 讓 PuTTY、PieTTY、WinSCP 軟體,以及 OpenSSH Client 免密碼登入 Linux。

SSH 金鑰免密碼登入 Linux

原理

透過公開金鑰加密 (Public-key cryptography) 或稱「非對稱金鑰加密」的兩把加解密鑰匙 Public Key (公鑰) 和 Private Key (私鑰),取代 Client 使用 SSH 協定連結 Server 登入時必須輸入驗證密碼的動作:

  1. Public Key:存放於 Server,路徑與檔名必須依據 /etc/ssh/sshd_config 內的 AuthorizedKeysFile 定義來設定。
  2. Private Key:存放於 Client,用來解密 Server 的 Public Key,因此只要誰擁有 Private Key 就能夠 SSH 連結且免密碼直接登入 Server,所以 Private Key 非常重要,不可外流。

系統環境

  • Server:Linux (CentOS 7)。
  • Client:Windows 7 / 10。

Linux (Server)

建立金鑰

以當前登入身份建立金鑰,預設會在家目錄下的 .ssh/ 產生這兩把金鑰檔 :

由於安全性考量,強烈建議不要讓 root 帳戶可使用 SSH 金鑰免密碼登入系統。


本範例使用 root 帳戶僅為測試。

[root@localhost ~]# ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):    # 儲存金鑰路徑和檔名,使用預設直接 Enter
Enter passphrase (empty for no passphrase):                 # 不建立密碼,直接 Enter
Enter same passphrase again:                                # 密碼確認,直接 Enter
Your identification has been saved in /root/.ssh/id_rsa.    # Private Key
Your public key has been saved in /root/.ssh/id_rsa.pub.    # Public Key
The key fingerprint is:
SHA256:GkGkaUeYxaiKDF+8AMIFJlQC0kH4Mm8qs0EnAsJa0FE root@localhost.localdomain

Public Key 路徑與檔名

Public Key 儲放的路徑與檔名必須依據 /etc/ssh/sshd_config 內的 AuthorizedKeysFile 定義來設定:

[root@footmark ~]# vim /etc/ssh/sshd_config

... 以上省略

AuthorizedKeysFile  .ssh/authorized_keys

依 /etc/ssh/sshd_config 設定檔更改 Public Key 檔名:

[root@localhost ~]# mv .ssh/id_rsa.pub .ssh/authorized_keys

權限

建立的兩把金鑰,雖然預設的權限就都是正確的了,但還是有必要了解一些規則,因為只要一個設定有誤,就可能會被判定為危險,而造成 Public Key 和 Private Key 無法順利比對:

  • ~/.ssh/ (目錄):權限必須為 700 (drwx------)。
  • ~.ssh/authorized_keys (Public Key)
    • 權限必須為 600 (-rw-------)。
    • 擁有者必須屬於本身帳戶才行。

檢查權限設定:

[root@localhost ~]# ls -ld .ssh; ls -l .ssh
drwx------. 2 root root 38  7月  3 14:42 .ssh
總計 8
-rw-------. 1 root root 1679  7月  3 14:42 id_rsa
-rw-r--r--. 1 root root  408  7月  3 14:42 authorized_keys # id_rsa.pub 更改名稱後的檔名

Windows (Client)

取得 Private Key

使用 WinSCP 連結 Linux,取得在 Linux 產生的 Private Key。

WinSCP 存取 Linux 檔案
WinSCP 存取 Linux 檔案

使用 Private Key SSH 連結 Linux

軟體

在 Windows 要讓 PuTTYPieTTY 或 WinSCP ... 軟體可使用 Private Key 來 SSH 連結 Linux,必須先透過 PuTTYgen 將在 Linux 產生的 Private Key 轉換成 Windows 系統可識別的 *.ppk 才可正常使用。

軟體加入使用 *.ppk 的方式可參考 PieTTYWinSCP

選擇要轉換成 *.ppk 的 Private Key 檔:

PuTTY Key Generator 載入要轉換成 *.ppk 的 Private Key
PuTTY Key Generator 載入要轉換成 *.ppk 的 Private Key

儲存轉換成 *.ppk 的 Private Key:

自訂檔名,但副檔名必須為 *.ppk:

OpenSSH Client

要讓 Windows 7/8/10 在命令提示字元 (cmd.exe) 或 PowerShell 可支援 ssh 指令,也是透過和 Linux 相同的 OpenSSH,因此不須像軟體還要轉換在 Linux 產生的 Private Key 即可直接使用。

執行 ssh 指令時會自動到使用者家目錄的 .ssh/ 目錄下尋找有無可用的 Private Key,因此我們要將 Private Key 移到這:

開啟 CMD 執行指令 ssh + 登入帳戶 + @ + Server 位址,即可免密碼直接登入 Linux Server:

如有多個 Private Key 可使用 -i 參數指定要使用的 Private Key 檔,例如 ssh root@192.168.1.200 -i C:\Users\jacky.wang\Desktop\id_rsa

參考


發表迴響