從 Windows 11 產生 SSH 金鑰並佈署到 Ubuntu
· #SSH #Windows 11 #Ubuntu #教學 #系統管理
本篇記錄一套標準流程:在 Windows 11 用 PowerShell 產生 SSH 金鑰,再將公鑰放上 Ubuntu 主機,最終以金鑰登入、並可選關閉密碼驗證以提升安全性。
適用情境:你有一台 Ubuntu(如本站的 wiki.nginx.tw 主機),想從 Windows 桌面以金鑰登入,不再每次輸入密碼。
一、在 Windows 11 產生金鑰
Windows 11 預設已內建 OpenSSH 用戶端。開啟「開始」→ 輸入 powershell → 以一般使用者身分開啟。
先確認有 ssh 指令:
ssh -V
# 應出現 OpenSSH_for_Windows_... 之類版本字樣
若提示找不到指令,請到「設定 → 應用程式 → 選用功能 → 新增功能」安裝 OpenSSH 用戶端。
產生 ed25519 金鑰(較新、較短且安全):
ssh-keygen -t ed25519 -C "sugarwu@windows"
過程會詢問:
Enter file in which to save the key:直接按 Enter,使用預設路徑C:\Users\你的使用者\.ssh\id_ed25519Enter passphrase:建議設定一組密碼(passphrase),即使私鑰外洩也能多一層保護;不想設可留空直接 Enter
產生完成後,.ssh 資料夾下會有兩個檔案:
id_ed25519—— 私鑰,絕對不能給別人id_ed25519.pub—— 公鑰,要放到 Ubuntu 上
二、查看並準備公鑰
在 PowerShell 顯示公鑰內容:
Get-Content $env:USERPROFILE\.ssh\id_ed25519.pub
會看到一行以 ssh-ed25519 AAAA... 註解 開頭的文字,整行就是你的公鑰。
三、把公鑰放上 Ubuntu
Windows 預設沒有 ssh-copy-id,故採用「一行指令」方式:把公鑰透過管道送進遠端,由 Ubuntu 自行追加到 authorized_keys。
Get-Content $env:USERPROFILE\.ssh\id_ed25519.pub | ssh 你的使用者@Ubuntu主機IP "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys && chmod 700 ~/.ssh && chmod 600 ~/.ssh/authorized_keys"
說明:
- 這行指令會先以密碼登入 Ubuntu(你目前還沒設金鑰,所以用密碼)
- 遠端的
mkdir -p ~/.ssh確保目錄存在 cat >> ~/.ssh/authorized_keys把傳入的公鑰追加進去- 最後兩道
chmod設定正確權限(Ubuntu 對權限很嚴格,錯了會拒絕金鑰登入)
若你偏好分步操作:也可先
scp $env:USERPROFILE\.ssh\id_ed25519.pub 使用者@IP:~/,SSH 登入後再cat ~/id_ed25519.pub >> ~/.ssh/authorized_keys並設權限。
四、驗證金鑰登入
ssh 你的使用者@Ubuntu主機IP
若設定成功,應能不再輸入伺服器密碼直接登入。
- 有設 passphrase:會提示輸入 passphrase(這是你本機私鑰的密碼,仍屬金鑰登入)
- 想免去每次輸入 passphrase,可在 PowerShell 啟用 ssh-agent:
Start-Service ssh-agent
ssh-add $env:USERPROFILE\.ssh\id_ed25519
五、(選用)關閉密碼登入,強化安全
確認金鑰可登入後,可停用密碼驗證,杜絕暴力破解。在 Ubuntu 上編輯設定:
sudo nano /etc/ssh/sshd_config
調整或新增以下兩行:
PubkeyAuthentication yes
PasswordAuthentication no
重啟 SSH 服務:
sudo systemctl restart ssh
重要:務必在「已確認金鑰能登入」之後才關閉密碼,否則可能把自己鎖在門外。若主機有網頁控制台(如 VPS 的 rescue console),請先確認可從該處救援。
小結
整套流程只需三分鐘:Windows 產 ed25519 金鑰 → 一行 PowerShell 把公鑰送進 Ubuntu → 驗證登入 → 視需求關閉密碼。金鑰登入比純密碼更安全,也更適合搭配自動化腳本使用。