如何保護 Linux VPS 上的 SSH

作者 ONIE 工程團隊 · 更新於 2026年11月12日 · 閱讀時間 1 分鐘

公開的 VPS 一上線,幾分鐘內就會遭到自動化的登入嘗試。以下步驟能大幅提高 SSH 的攻擊門檻。這些步驟以 Ubuntu 或 Debian 為準;如果你還沒有伺服器,可以租用 Linux VPS,從乾淨的映像檔開始。在從第二個視窗測試新設定之前,請保持目前的 SSH 工作階段開啟。

1. 建立具有 sudo 權限的一般使用者

adduser deploy
usermod -aG sudo deploy

2. 使用 SSH 金鑰取代密碼

在你自己的電腦上執行:

ssh-keygen -t ed25519 -C "you@example.com"
ssh-copy-id deploy@YOUR_SERVER_IP
ssh deploy@YOUR_SERVER_IP

在關閉密碼登入之前,先用金鑰登入一次,確認可以正常運作。

3. 關閉密碼與 root 登入

建立 /etc/ssh/sshd_config.d/99-hardening.conf:

PasswordAuthentication no
PermitRootLogin no
PubkeyAuthentication yes
MaxAuthTries 3

檢查語法並重新載入服務。在 Ubuntu 與 Debian 上服務名稱為 ssh,在 RHEL 系列系統上則為 sshd:

sudo sshd -t && sudo systemctl reload ssh

開啟第二個終端機並重新登入。確認成功後,才關閉舊的工作階段。

4. 啟用防火牆

sudo ufw default deny incoming
sudo ufw default allow outgoing
sudo ufw allow OpenSSH
sudo ufw enable
sudo ufw status verbose

只開放你需要的連接埠,例如網頁伺服器所需的 80 與 443。你也可以在雲端主控台中設定防火牆規則,將 SSH 限制為只允許你自己的 IP 位址連線。

5. 使用 Fail2ban 封鎖重複的失敗登入

sudo apt install -y fail2ban

建立 /etc/fail2ban/jail.local:

[sshd]
enabled = true
maxretry = 5
findtime = 10m
bantime = 1h
sudo systemctl enable --now fail2ban
sudo fail2ban-client status sshd

6. 自動安裝安全更新

sudo apt install -y unattended-upgrades
sudo dpkg-reconfigure --priority=low unattended-upgrades

7. 選用的補充措施

  • 變更 SSH 連接埠可以減少記錄檔的雜訊,但它本身並不是安全措施。
  • 為私密金鑰設定密碼片語,並將備份保存在安全的地方。
  • 使用 last 與 sudo journalctl -u ssh --since today 檢視登入紀錄。
  • 伺服器設定完成後,建立一個快照,以便之後還原到乾淨的基準狀態。

如果你被鎖在伺服器外,請使用雲端控制台中的瀏覽器主控台登入,並修正設定。我們的DDoS 防護指南涵蓋了下一層的防禦措施。

常見問題

停用 root 登入安全嗎?

安全,但前提是你已先建立 sudo 使用者,並測試過其金鑰可以正常運作。你仍然可以透過 sudo 執行管理指令。

如果只使用金鑰,還需要 Fail2ban 嗎?

這是選用的。停用密碼登入後,暴力破解便無法成功,但 Fail2ban 仍能減少記錄檔的雜訊與系統負載。

如果遺失 SSH 金鑰怎麼辦?

使用雲端控制台中的主控台登入,將新的公開金鑰加入 ~/.ssh/authorized_keys,並移除舊的金鑰。

參考資料與延伸閱讀

更多 VPS 指南