Windows 上生成 SSH 公鑰(id_rsa.pub)的步驟

在 Windows 上生成 SSH 公鑰(id_rsa.pub)的步驟

以下是使用 Windows 內建 OpenSSH 工具生成 SSH 金鑰對(含 id_rsa.pub)的詳細步驟:


步驟 1:開啟 PowerShell

  • Win + X,選擇 Windows PowerShell終端機(非命令提示字元)。
  • 建議以 系統管理員身分執行(非必需,但可避免權限問題)。

步驟 2:生成 SSH 金鑰對

輸入以下命令(使用 RSA 演算法,4096 位元提高安全性):

ssh-keygen -t rsa -b 4096

步驟 3:設定金鑰儲存路徑

  1. 系統會提示:

    Enter file in which to save the key (C:\Users\你的用戶名\.ssh\id_rsa):
    
    • 直接按 Enter 使用預設路徑(推薦)。
    • 若需自訂路徑,輸入完整路徑(例如 C:\my_keys\server_key)。
  2. 安全提示
    :warning: 若檔案已存在,會詢問是否覆蓋。請確認避免誤刪舊金鑰!


步驟 4:設定金鑰密碼(Passphrase)

  1. 系統提示:

    Enter passphrase (empty for no passphrase):
    
    • 建議輸入密碼:即使私鑰被盜也需密碼才能使用(提高安全性)。
    • 若跳過,直接按 Enter(不建議,尤其生產環境)。
  2. 再次輸入密碼確認:

    Enter same passphrase again:
    

步驟 5:完成生成

  • 成功後顯示:
    Your identification has been saved in C:\Users\用戶名\.ssh\id_rsa.
    Your public key has been saved in C:\Users\用戶名\.ssh\id_rsa.pub.
    
  • 金鑰指紋(SHA256)會一併顯示,用於後續驗證。

步驟 6:取得公鑰內容(id_rsa.pub)

  1. 使用以下命令複製公鑰內容:

    cat ~\.ssh\id_rsa.pub
    
    • 或手動用記事本開啟檔案:
      C:\Users\你的用戶名\.ssh\id_rsa.pub
  2. 公鑰格式範例

    ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQC...(長串字元)... user@host
    

將公鑰部署到伺服器

  1. 複製公鑰內容
    id_rsa.pub 複製全部文字(開頭 ssh-rsa 到結尾郵箱)。

  2. 登入遠端伺服器

    ssh 你的帳號@伺服器IP
    
  3. 將公鑰加入 authorized_keys

    # 若目錄不存在則建立
    mkdir -p ~/.ssh
    chmod 700 ~/.ssh
    # 將公鑰寫入文件
    echo "貼上複製的公鑰內容" >> ~/.ssh/authorized_keys
    chmod 600 ~/.ssh/authorized_keys
    

測試 SSH 登入

ssh -i C:\Users\用戶名\.ssh\id_rsa 你的帳號@伺服器IP
  • 若設定了密碼,會提示輸入金鑰密碼(Passphrase)。
  • 成功後即可免密碼登入!

進階設定(可選)

使用 ssh-agent 管理金鑰密碼

避免每次輸入金鑰密碼:

# 啟動 ssh-agent 服務
Start-Service ssh-agent
# 將私鑰加入 agent
ssh-add ~\.ssh\id_rsa

輸入一次密碼後,當前會話即可重複使用金鑰。


疑難排解

  1. 權限錯誤
    確保 ~/.ssh 目錄權限為 700authorized_keys600

  2. 連線被拒
    檢查伺服器 SSH 設定(/etc/ssh/sshd_config):

    PubkeyAuthentication yes
    AuthorizedKeysFile .ssh/authorized_keys
    

總結流程

graph LR
A[開啟 PowerShell] --> B[執行 ssh-keygen]
B --> C[設定路徑與密碼]
C --> D[取得 id_rsa.pub 內容]
D --> E[複製公鑰到伺服器]
E --> F[測試登入]

透過以上步驟,即可在 Windows 安全生成 SSH 金鑰並實現免密碼登入伺服器!