拿到一台新的 VPS,第一件該做的事不是裝服務,而是把 SSH Key 設定好。密碼登入不僅每次都要打一串亂碼,更大的問題是它容易被暴力破解。SSH Key 用非對稱加密取代密碼驗證,既安全又方便,是每個系統管理員的基本功。
這篇文章會帶你從零開始,在 Windows、macOS、Linux 上產生 SSH Key,部署到 VPS 上,最後關閉密碼登入,把伺服器的大門鎖好。
SSH Key 驗證的原理
SSH Key 認證靠的是一對金鑰:公鑰(Public Key) 和 私鑰(Private Key)。公鑰放在伺服器上,私鑰留在你自己的電腦裡。
登入時,伺服器會用公鑰產生一段加密的「挑戰」訊息,只有持有對應私鑰的人才能正確回應。整個過程中,私鑰不會離開你的電腦,也不會透過網路傳輸,所以即使有人攔截封包,也拿不到你的私鑰。
跟密碼比起來,SSH Key 的優勢很明確:
- 不怕暴力破解:金鑰長度遠超一般密碼
- 不怕釣魚:私鑰不會被「騙走」
- 免打密碼:連線時自動驗證,效率高
- 可以針對不同主機用不同金鑰:管理更靈活
選擇金鑰演算法:為什麼推薦 Ed25519
產生金鑰時要選演算法。你可能看過很多教學用 RSA,但 2026 年的建議是直接用 Ed25519。
| 演算法 | 金鑰長度 | 安全性 | 速度 | 建議 |
|---|---|---|---|---|
| RSA 2048 | 2048 bit | 基本 | 慢 | 不建議 |
| RSA 4096 | 4096 bit | 好 | 更慢 | 可接受但沒必要 |
| Ed25519 | 256 bit | 很好 | 快 | 推薦 |
Ed25519 基於橢圓曲線密碼學,金鑰短、運算快、安全性比同長度的 RSA 更高。除非你的目標伺服器真的太老舊(OpenSSH 6.5 以前),否則沒理由不用它。
Step 1:在本機產生 SSH Key
三個平台的指令幾乎一樣。打開終端機,輸入:
1 | ssh-keygen -t ed25519 -C "your_email@example.com" |
-C 後面是註解,通常填你的 email,方便辨識這把金鑰是誰的。
系統會問你幾個問題:
1 | Generating public/private ed25519 key pair. |
直接按 Enter 使用預設路徑即可。
1 | Enter passphrase (empty for no passphrase): |
Passphrase 建議設定一組。這是私鑰的二次保護——就算私鑰檔案被偷走,沒有 passphrase 也用不了。如果你真的覺得每次輸入很煩,可以搭配 ssh-agent 來快取(後面會講)。
完成後,你的 ~/.ssh/ 資料夾裡會多兩個檔案:
id_ed25519:私鑰,絕對不能外洩id_ed25519.pub:公鑰,這個要放到伺服器上
Windows 使用者注意
Windows 10 以上已經內建 OpenSSH,可以直接在 PowerShell 或 Windows Terminal 執行上面的指令。金鑰預設存在 C:\Users\你的帳號\.ssh\ 裡。
如果你用的是更早的 Windows 版本,可以安裝 Git for Windows,裡面的 Git Bash 也自帶 ssh-keygen。
Step 2:把公鑰部署到 VPS
最簡單的方式是用 ssh-copy-id(macOS 和 Linux 內建,Windows 需額外安裝或手動操作):
1 | ssh-copy-id -i ~/.ssh/id_ed25519.pub root@你的VPS_IP |
這個指令會自動把公鑰內容附加到伺服器的 ~/.ssh/authorized_keys 檔案裡。
手動部署(適用於所有平台)
如果你的環境沒有 ssh-copy-id,可以手動操作:
1 | # 先用密碼登入 VPS |
權限設定很重要,搞錯的話 SSH 會拒絕金鑰登入:
| 路徑 | 權限 | 指令 |
|---|---|---|
~/.ssh/ |
700 | chmod 700 ~/.ssh |
~/.ssh/authorized_keys |
600 | chmod 600 ~/.ssh/authorized_keys |
Step 3:測試金鑰登入
部署完公鑰後,開一個新的終端機視窗測試:
1 | ssh root@你的VPS_IP |
如果你有設定 passphrase,這時會要求輸入;如果沒有,應該直接就登入了。看到命令提示字元就表示成功。
重要:在確認金鑰登入成功之前,不要關閉密碼登入。 不然你可能會把自己鎖在門外。
Step 4:關閉密碼登入
確認金鑰登入沒問題後,就可以關閉密碼驗證了。編輯 VPS 上的 SSH 設定檔:
1 | sudo nano /etc/ssh/sshd_config |
找到以下幾行,修改成這樣(如果前面有 # 要拿掉):
1 | PasswordAuthentication no |
PermitRootLogin prohibit-password 表示 root 帳號只能用金鑰登入,不接受密碼。如果你已經建立了一般使用者帳號,也可以直接設成 PermitRootLogin no,安全性更高。
儲存後重新啟動 SSH 服務:
1 | sudo systemctl restart sshd |
再次提醒:改完之後先用另一個終端機視窗測試能不能登入,確認沒問題再關掉舊的連線。
進階:用 ssh-config 管理多台主機
當你管理的 VPS 越來越多,每次都打 ssh root@123.456.789.0 會很累。這時候可以設定 ~/.ssh/config:
1 | Host ncse-web |
設定好之後,連線只要打:
1 | ssh ncse-web |
就會自動帶入 IP、帳號、金鑰檔案和 Port。SCP 和 SFTP 也可以直接用這個別名。
進階:用 ssh-agent 快取 Passphrase
如果你有設 passphrase 但不想每次都輸入,可以用 ssh-agent:
1 | # 啟動 agent |
加入之後,這個終端機 session 內的所有 SSH 連線都不用再輸入 passphrase。
macOS 使用者可以在 ~/.ssh/config 加上這段,讓系統自動幫你記住:
1 | Host * |
常見問題排除
Q:設定完金鑰還是要求輸入密碼?
八成是權限問題。在伺服器上執行:
1 | chmod 700 ~/.ssh |
如果還是不行,檢查 /var/log/auth.log(Debian/Ubuntu)或 /var/log/secure(CentOS/RHEL)裡有沒有錯誤訊息。
Q:可以多台電腦用同一組金鑰嗎?
技術上可以,但不建議。每台電腦各自產生一組金鑰,分別加到伺服器的 authorized_keys 裡。這樣某台電腦遺失時,只要移除那把公鑰就好,不會影響其他電腦。
Q:私鑰不小心外洩了怎麼辦?
立刻登入所有伺服器,從 authorized_keys 裡移除對應的公鑰,然後重新產生一組新的金鑰對。如果有設 passphrase,至少還有一層防護可以爭取時間。
結語
SSH Key 設定不難,但它是 VPS 安全的第一道防線。產生金鑰、部署公鑰、關閉密碼登入,這三個步驟做完,你的伺服器就比大多數人的安全了。搭配 ssh-config 和 ssh-agent,日常管理也會順手很多。
如果你正在找一台效能穩定的台灣 VPS 來實作這篇教學的內容,NCSE Network 提供搭載 Intel Gold CPU 和 NVMe SSD 的 VPS 主機,機房位於台灣,連線延遲低、網路品質好。開通後就能直接用 SSH Key 登入,馬上開始部署你的服務。