Windows PEM 轉 PPK 完整指南:PuTTY 金鑰轉換與 SSH 連線設定

🌏 Read the English version

Windows PEM 轉 PPK 完整指南:PuTTY 金鑰轉換與 SSH 連線設定

在雲端運算和遠端伺服器管理的世界中,SSH(Secure Shell)連線是系統管理員和開發者的日常工具。對於 Windows 使用者來說,PuTTY 是最受歡迎的 SSH 客戶端之一。然而,AWS EC2、Azure VM 等雲端服務通常提供 PEM 格式的私鑰,而 PuTTY 使用的是 PPK(PuTTY Private Key)格式。本文將詳細說明如何在 Windows 上將 PEM 檔案轉換為 PPK 檔案,並涵蓋完整的連線設定與疑難排解。

為什麼需要 PEM 到 PPK 的轉換?

SSH 金鑰格式的差異

特性 PEM 格式 PPK 格式
全名 Privacy-Enhanced Mail PuTTY Private Key
標準 OpenSSH 標準格式 PuTTY 專屬格式
使用平台 Linux, macOS, Windows (OpenSSH) Windows (PuTTY, WinSCP)
檔案開頭 -----BEGIN RSA PRIVATE KEY----- PuTTY-User-Key-File-2:
加密支援 可選(透過密碼短語) 可選(透過密碼短語)
相容性 廣泛支援 僅 PuTTY 工具鏈

常見使用場景

  • AWS EC2:下載的金鑰對為 .pem 格式
  • Azure VM:支援 SSH 公鑰認證,私鑰通常為 PEM 格式
  • Google Cloud Platform:Compute Engine 實例使用 OpenSSH 格式
  • 自建 Linux 伺服器:通常生成 OpenSSH 格式金鑰

如果您使用 PuTTY 作為 SSH 客戶端,就需要將這些 PEM 格式金鑰轉換為 PPK 格式。

方法一:使用 PuTTYgen 轉換(圖形介面)

步驟 1:安裝 PuTTY 套件

下載與安裝

  1. 訪問官方網站https://www.putty.org/
  2. 選擇安裝程式
    • 64-bit x86putty-64bit-X.XX-installer.msi
    • 32-bit x86putty-X.XX-installer.msi
    • ARM64putty-arm64-X.XX-installer.msi
  3. 執行安裝程式
    • 接受授權協議
    • 選擇安裝路徑(預設:C:Program FilesPuTTY
    • 完成安裝

套件內容

完整安裝後,您將獲得以下工具:

  • PuTTY:SSH 客戶端主程式
  • PuTTYgen:金鑰生成與轉換工具
  • Pageant:SSH 金鑰管理代理
  • PSFTP:SFTP 客戶端
  • PSCP:SCP 客戶端
  • Plink:命令列 SSH 工具

步驟 2:使用 PuTTYgen 轉換金鑰

啟動 PuTTYgen

方法一:開始菜單

Windows 鍵 → 輸入「PuTTYgen」→ 點擊「PuTTYgen」

方法二:執行檔案

C:Program FilesPuTTYputtygen.exe

導入 PEM 金鑰

  1. 點擊「Conversions」選單
  2. 選擇「Import key」
  3. 瀏覽並選擇您的 .pem 檔案
    • 檔案類型預設為「All Files (*.*)」
    • 選擇您的 PEM 金鑰(例如:my-key.pem
  4. 如果金鑰有密碼短語,輸入密碼

金鑰資訊顯示

導入成功後,PuTTYgen 視窗會顯示:

  • Key fingerprint:金鑰指紋(用於驗證)
  • Key comment:金鑰註釋(可修改)
  • Public key:公鑰內容(可複製)
  • Parameters:金鑰參數(類型、位元數)

儲存為 PPK 格式

  1. (可選)修改金鑰註釋
    • 在「Key comment」欄位輸入描述性文字
    • 例如:AWS-EC2-Production-Server
  2. (可選)設定密碼短語
    • 在「Key passphrase」欄位輸入密碼
    • 在「Confirm passphrase」欄位再次輸入
    • 建議:為了安全性,強烈建議設定密碼
  3. 點擊「Save private key」按鈕
  4. 如果未設定密碼,會出現警告訊息
    • 「Are you sure you want to save this key without a passphrase to protect it?」
    • 根據需求選擇「是」或「否」
  5. 選擇儲存位置並命名
    • 建議使用描述性名稱:aws-ec2-prod.ppk
    • 儲存在安全的位置(例如:C:UsersYourName.ssh

步驟 3:驗證轉換結果

# 檢查 PPK 檔案內容(PowerShell)
Get-Content C:UsersYourName.sshaws-ec2-prod.ppk -Head 5

# 輸出範例:
# PuTTY-User-Key-File-2: ssh-rsa
# Encryption: none
# Comment: AWS-EC2-Production-Server
# Public-Lines: 6
# AAAAB3NzaC1yc2EAAAADAQABAAABAQC...

方法二:使用 WinSCP 轉換(整合方式)

WinSCP 是另一款 Windows SFTP/SCP 客戶端,內建 PEM 到 PPK 的轉換功能。

步驟

  1. 下載並安裝 WinSCP
  2. 在登入視窗中,點擊「Advanced」→「SSH」→「Authentication」
  3. 在「Private key file」欄位,瀏覽選擇您的 .pem 檔案
  4. WinSCP 會自動提示轉換
  5. 點擊「OK」,選擇儲存 PPK 檔案的位置

方法三:使用 PowerShell / OpenSSH(Windows 10/11)

Windows 10(1809+)和 Windows 11 內建 OpenSSH,可直接使用 PEM 金鑰。

檢查 OpenSSH 是否已安裝

# 檢查 OpenSSH 客戶端
Get-WindowsCapability -Online | Where-Object Name -like 'OpenSSH.Client*'

# 如果未安裝,執行安裝
Add-WindowsCapability -Online -Name OpenSSH.Client~~~~0.0.1.0

直接使用 PEM 金鑰連線

# 設定金鑰權限(重要!)
icacls "C:UsersYourName.sshmy-key.pem" /inheritance:r
icacls "C:UsersYourName.sshmy-key.pem" /grant:r "%username%:R"

# 使用 SSH 連線
ssh -i C:UsersYourName.sshmy-key.pem ubuntu@ec2-xx-xx-xx-xx.compute.amazonaws.com

優點:無需轉換格式,直接使用 OpenSSH 標準工具。

使用 PPK 金鑰連接到遠端伺服器

方法一:使用 PuTTY 連線

  1. 啟動 PuTTY
  2. Session 設定
    • Host Name:輸入伺服器 IP 或網域名稱
    • Port:22(SSH 預設埠號)
    • Connection type:SSH
  3. SSH 金鑰設定
    • 展開左側選單:Connection → SSH → Auth
    • 點擊「Browse…」
    • 選擇您的 PPK 檔案
  4. (可選)儲存連線設定
    • 回到「Session」分類
    • 在「Saved Sessions」輸入名稱(例如:AWS Production
    • 點擊「Save」
  5. 點擊「Open」開始連線
  6. 首次連線會出現安全性警告
    • 「The server’s host key is not cached in the registry」
    • 點擊「Yes」信任並儲存
  7. 輸入使用者名稱
    • AWS EC2 Ubuntu:ubuntu
    • AWS EC2 Amazon Linux:ec2-user
    • Azure Ubuntu VM:您建立時設定的使用者名稱

方法二:使用 Pageant(金鑰代理)

Pageant 是 PuTTY 的 SSH 金鑰代理,可以自動提供金鑰,無需每次連線時手動選擇。

  1. 啟動 Pageant
    • Windows 鍵 → 輸入「Pageant」→ 執行
    • Pageant 會在系統匣執行(顯示為電腦圖示)
  2. 載入 PPK 金鑰
    • 雙擊系統匣的 Pageant 圖示
    • 點擊「Add Key」
    • 選擇您的 PPK 檔案
    • 如果金鑰有密碼短語,輸入密碼
  3. 使用 PuTTY 連線
    • 現在連線時無需指定金鑰檔案
    • Pageant 會自動提供金鑰

方法三:使用 WinSCP 檔案傳輸

  1. 啟動 WinSCP
  2. 在登入視窗中設定:
    • File protocol:SFTP
    • Host name:伺服器 IP
    • Port number:22
    • User name:登入使用者
  3. 點擊「Advanced」→「SSH」→「Authentication」
  4. 在「Private key file」選擇您的 PPK 檔案
  5. 點擊「Login」連線

常見問題排除

問題 1:「PuTTYgen doesn’t support this type of key file」

原因:PEM 檔案格式不正確或已損壞。

解決方案

  1. 檢查 PEM 檔案內容:
    Get-Content my-key.pem
    
    確認檔案開頭為:
    -----BEGIN RSA PRIVATE KEY-----
    或
    -----BEGIN PRIVATE KEY-----
    或
    -----BEGIN OPENSSH PRIVATE KEY-----
    
  2. 如果是 OpenSSH 新格式,使用 OpenSSH 工具轉換:
    ssh-keygen -p -m PEM -f my-key.pem
    

問題 2:「Server refused our key」

原因:伺服器端的公鑰與您的私鑰不匹配,或權限設定錯誤。

解決方案

  1. 確認使用正確的金鑰對
  2. 檢查伺服器端 ~/.ssh/authorized_keys 檔案權限:
    chmod 700 ~/.ssh
    chmod 600 ~/.ssh/authorized_keys
    
  3. 驗證公鑰內容是否正確匹配

問題 3:「Disconnected: No supported authentication methods available」

原因:伺服器未啟用公鑰認證,或 sshd_config 配置錯誤。

解決方案

檢查伺服器端 SSH 配置:

sudo nano /etc/ssh/sshd_config

# 確認以下設定:
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys

# 重啟 SSH 服務
sudo systemctl restart sshd

問題 4:「Unable to use key file」(權限問題)

原因:Windows 檔案權限過於寬鬆。

解決方案

# 移除繼承權限
icacls "C:pathtokey.ppk" /inheritance:r

# 授予當前使用者完全控制
icacls "C:pathtokey.ppk" /grant:r "%username%:F"

# 確認權限設定
icacls "C:pathtokey.ppk"

安全性最佳實踐

1. 金鑰管理

  • 使用強密碼短語保護金鑰:建議至少 20 個字元
  • 定期輪換金鑰:每 6-12 個月更換一次
  • 備份金鑰:儲存在加密的備份裝置或密碼管理器中
  • 不要共享私鑰:每個使用者應該有自己的金鑰對
  • 避免將金鑰儲存在共享位置:如網路磁碟機或雲端同步資料夾

2. 檔案權限

# 確保私鑰僅限當前使用者存取
icacls "C:UsersYourName.ssh*.ppk" /inheritance:r
icacls "C:UsersYourName.ssh*.ppk" /grant:r "%username%:F"

3. 金鑰強度

  • RSA:至少 2048 位元(建議 4096 位元)
  • ED25519:現代化、更安全的演算法(建議使用)
  • ECDSA:256 位元以上

4. 伺服器端安全設定

# 停用密碼登入(僅允許金鑰認證)
sudo nano /etc/ssh/sshd_config

# 修改以下設定:
PasswordAuthentication no
ChallengeResponseAuthentication no
UsePAM no

# 重啟 SSH
sudo systemctl restart sshd

5. 使用 SSH 憑證管理工具

  • Windows Credential Manager:整合至 Windows
  • KeePass:開源密碼管理器
  • 1Password / Bitwarden:商業解決方案,支援 SSH 金鑰儲存

進階技巧

批次轉換多個 PEM 檔案

使用 PowerShell 自動化轉換:

# 批次轉換腳本
$pemFiles = Get-ChildItem -Path "C:keys" -Filter "*.pem"

foreach ($pem in $pemFiles) {
    $ppkFile = $pem.FullName -replace '.pem$', '.ppk'
    
    # 使用 PuTTYgen 命令列模式
    & "C:Program FilesPuTTYputtygen.exe" $pem.FullName -o $ppkFile
    
    Write-Host "已轉換: $($pem.Name) → $([System.IO.Path]::GetFileName($ppkFile))"
}

使用 WSL (Windows Subsystem for Linux)

如果您安裝了 WSL,可以使用 Linux 原生 SSH 工具:

# 在 WSL 中使用 PEM 金鑰
chmod 600 /mnt/c/Users/YourName/.ssh/my-key.pem
ssh -i /mnt/c/Users/YourName/.ssh/my-key.pem ubuntu@server-ip

結論

將 PEM 格式金鑰轉換為 PPK 格式是 Windows 使用者使用 PuTTY 連接到雲端伺服器的必要步驟。透過本文介紹的三種方法:

  • PuTTYgen:適合圖形介面使用者,功能完整
  • WinSCP:適合同時需要檔案傳輸的場景
  • OpenSSH:適合 Windows 10/11 使用者,無需轉換

您可以根據自己的需求選擇最適合的方法。無論選擇哪種方式,都請記得遵循安全性最佳實踐,保護您的 SSH 金鑰安全。

快速檢查清單:

  • ☐ 已安裝 PuTTY 或 OpenSSH
  • ☐ 已成功轉換 PEM 到 PPK(如使用 PuTTY)
  • ☐ 已設定金鑰密碼短語
  • ☐ 已驗證檔案權限
  • ☐ 已成功連線到遠端伺服器
  • ☐ 已備份私鑰到安全位置

祝您連線順利!

相關文章

Leave a Comment