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 套件
下載與安裝
- 訪問官方網站:https://www.putty.org/
- 選擇安裝程式:
- 64-bit x86:
putty-64bit-X.XX-installer.msi - 32-bit x86:
putty-X.XX-installer.msi - ARM64:
putty-arm64-X.XX-installer.msi
- 64-bit x86:
- 執行安裝程式:
- 接受授權協議
- 選擇安裝路徑(預設:
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 金鑰
- 點擊「Conversions」選單
- 選擇「Import key」
- 瀏覽並選擇您的 .pem 檔案
- 檔案類型預設為「All Files (*.*)」
- 選擇您的 PEM 金鑰(例如:
my-key.pem)
- 如果金鑰有密碼短語,輸入密碼
金鑰資訊顯示
導入成功後,PuTTYgen 視窗會顯示:
- Key fingerprint:金鑰指紋(用於驗證)
- Key comment:金鑰註釋(可修改)
- Public key:公鑰內容(可複製)
- Parameters:金鑰參數(類型、位元數)
儲存為 PPK 格式
- (可選)修改金鑰註釋
- 在「Key comment」欄位輸入描述性文字
- 例如:
AWS-EC2-Production-Server
- (可選)設定密碼短語
- 在「Key passphrase」欄位輸入密碼
- 在「Confirm passphrase」欄位再次輸入
- 建議:為了安全性,強烈建議設定密碼
- 點擊「Save private key」按鈕
- 如果未設定密碼,會出現警告訊息
- 「Are you sure you want to save this key without a passphrase to protect it?」
- 根據需求選擇「是」或「否」
- 選擇儲存位置並命名
- 建議使用描述性名稱:
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 的轉換功能。
步驟
- 下載並安裝 WinSCP
- 在登入視窗中,點擊「Advanced」→「SSH」→「Authentication」
- 在「Private key file」欄位,瀏覽選擇您的 .pem 檔案
- WinSCP 會自動提示轉換
- 點擊「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 連線
- 啟動 PuTTY
- Session 設定
- Host Name:輸入伺服器 IP 或網域名稱
- Port:22(SSH 預設埠號)
- Connection type:SSH
- SSH 金鑰設定
- 展開左側選單:
Connection → SSH → Auth - 點擊「Browse…」
- 選擇您的 PPK 檔案
- 展開左側選單:
- (可選)儲存連線設定
- 回到「Session」分類
- 在「Saved Sessions」輸入名稱(例如:
AWS Production) - 點擊「Save」
- 點擊「Open」開始連線
- 首次連線會出現安全性警告
- 「The server’s host key is not cached in the registry」
- 點擊「Yes」信任並儲存
- 輸入使用者名稱
- AWS EC2 Ubuntu:
ubuntu - AWS EC2 Amazon Linux:
ec2-user - Azure Ubuntu VM:您建立時設定的使用者名稱
- AWS EC2 Ubuntu:
方法二:使用 Pageant(金鑰代理)
Pageant 是 PuTTY 的 SSH 金鑰代理,可以自動提供金鑰,無需每次連線時手動選擇。
- 啟動 Pageant
- Windows 鍵 → 輸入「Pageant」→ 執行
- Pageant 會在系統匣執行(顯示為電腦圖示)
- 載入 PPK 金鑰
- 雙擊系統匣的 Pageant 圖示
- 點擊「Add Key」
- 選擇您的 PPK 檔案
- 如果金鑰有密碼短語,輸入密碼
- 使用 PuTTY 連線
- 現在連線時無需指定金鑰檔案
- Pageant 會自動提供金鑰
方法三:使用 WinSCP 檔案傳輸
- 啟動 WinSCP
- 在登入視窗中設定:
- File protocol:SFTP
- Host name:伺服器 IP
- Port number:22
- User name:登入使用者
- 點擊「Advanced」→「SSH」→「Authentication」
- 在「Private key file」選擇您的 PPK 檔案
- 點擊「Login」連線
常見問題排除
問題 1:「PuTTYgen doesn’t support this type of key file」
原因:PEM 檔案格式不正確或已損壞。
解決方案:
- 檢查 PEM 檔案內容:
確認檔案開頭為:Get-Content my-key.pem-----BEGIN RSA PRIVATE KEY----- 或 -----BEGIN PRIVATE KEY----- 或 -----BEGIN OPENSSH PRIVATE KEY----- - 如果是 OpenSSH 新格式,使用 OpenSSH 工具轉換:
ssh-keygen -p -m PEM -f my-key.pem
問題 2:「Server refused our key」
原因:伺服器端的公鑰與您的私鑰不匹配,或權限設定錯誤。
解決方案:
- 確認使用正確的金鑰對
- 檢查伺服器端
~/.ssh/authorized_keys檔案權限:chmod 700 ~/.ssh chmod 600 ~/.ssh/authorized_keys - 驗證公鑰內容是否正確匹配
問題 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)
- ☐ 已設定金鑰密碼短語
- ☐ 已驗證檔案權限
- ☐ 已成功連線到遠端伺服器
- ☐ 已備份私鑰到安全位置
祝您連線順利!