從零建立安全的 SSH 登入環境 文章首圖

從零建立安全的 SSH 登入環境

從零建立安全的 SSH 登入環境

在伺服器管理與開發工作中,SSH (Secure Shell) 是最常用的遠端連線協定。然而,預設的 SSH 設定往往為了相容性而犧牲了安全性,例如允許密碼登入、使用標準埠號 22,甚至允許 root 直接登入。這些設定會讓伺服器暴露在暴力破解(Brute-force)與資安風險之下。

本文將以 Ubuntu 22.04 或 Debian 12 為基礎,帶領中階使用者逐步建立一個高安全性的 SSH 登入環境。我們將透過停用密碼登入、改用金鑰認證、變更預設埠號以及限制 root 存取等步驟,大幅提升伺服器的防禦能力。

前置準備:建立專屬使用者

在調整 SSH 設定之前,請務必確保你擁有一個具備 sudo 權限的一般使用者帳號。絕對不要直接使用 root 帳號進行後續操作,以免設定錯誤導致無法連線。

假設我們要建立一個名為 devops 的使用者,請執行以下指令:

sudo adduser devops
sudo usermod -aG sudo devops

步驟一:生成 SSH 金鑰對

金鑰認證比密碼認證更安全,因為它抵抗暴力破解攻擊。我們需要在本地端(你的電腦)生成金鑰對,並將公鑰上傳至伺服器。

在本地端終端機執行:

ssh-keygen -t ed25519 -C "your_email@example.com"

建議使用 ed25519 演算法,它比傳統的 RSA 更快速且同樣安全。系統會詢問金鑰儲存位置,直接按下 Enter 使用預設路徑 ~/.ssh/id_ed25519 即可。接著輸入兩次密碼(Passphrase),這將作為金鑰的第二重保護。

步驟二:將公鑰複製到伺服器

使用 ssh-copy-id 指令可以輕鬆將公鑰安裝到伺服器上:

ssh-copy-id devops@<伺服器IP>

輸入該使用者的密碼後,公鑰便會自動寫入伺服器的 ~/.ssh/authorized_keys 檔案中。此時,你應該已經可以不用密碼,直接透過金鑰登入該使用者帳號。

步驟三:強化 SSH 伺服器設定

現在我們來修改 SSH 的配置文件 /etc/ssh/sshd_config。請先備份原始設定,以防萬一:

sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak

使用編輯器開啟設定檔:

sudo nano /etc/ssh/sshd_config

請依照以下建議修改或新增對應的參數:

  1. 變更預設埠號:避免常見的掃描攻擊。
    Port 2222
  2. 停用 root 直接登入:強制使用者以一般身份登入,再透過 sudo 提升權限。
    PermitRootLogin no
  3. 停用密碼登入:強制使用金鑰認證,這是提升安全性最关键的一步。
    PasswordAuthentication no
  4. 啟用金鑰認證:確保相關功能已開啟。
    PubkeyAuthentication yes
  5. 限制允許登入的使用者:僅允許特定使用者連線。
    AllowUsers devops

修改完成後,儲存並離開編輯器。

步驟四:重新啟動 SSH 服務並測試

在重啟服務前,請務必保持當前連線開啟,並開啟另一個終端視窗進行測試,以免設定錯誤導致斷線。

重新啟動 SSH 服務:

sudo systemctl restart sshd

在新終端視窗中,嘗試使用新埠號與金鑰登入:

ssh -p 2222 devops@<伺服器IP>

如果成功登入且未提示輸入密碼(僅提示金鑰密碼),代表設定成功。若失敗,請檢查 /var/log/auth.log/var/log/secure 中的錯誤訊息。確認無誤後,可將舊的 SSH 埠號 22 關閉或透過防火牆封鎖,僅開放新埠號 2222。

常見問題

Q1:修改設定後無法連線怎麼辦? 請回到原本的連線視窗,檢查 /etc/ssh/sshd_config 是否有語法錯誤。若完全斷線,可透過主控台的 VNC 或 Console 功能登入伺服器,並恢復備份的設定檔:

sudo mv /etc/ssh/sshd_config.bak /etc/ssh/sshd_config
sudo systemctl restart sshd

Q2:金鑰登入失敗,提示 "Permission denied (publickey)"? 最常見的原因是檔案權限問題。請確保伺服器上 ~/.ssh 目錄權限為 700,authorized_keys 檔案權限為 600:

chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys

小結

透過上述步驟,我們成功建立了一個僅允許金鑰認證、限制 root 存取且使用非標準埠號的 SSH 環境。這不僅能有效抵擋絕大多數的自動掃描與暴力破解攻擊,也符合資安合規的基本要求。記住,安全性是一個持續的過程,建議定期更新 SSH 版本並監控登入日誌,以確保伺服器的長期安全。