SSH 密鑰認證完整教學:由零開始配置 SSH Key 登入強化伺服器安全

點解要學 SSH 密鑰認證? 如果你仲用緊密碼 login server,老實講,你等緊俾人爆破。SSH 密鑰認證(SSH Key Authentication)係目前最安全又方便嘅遠端登入方式,用咗佢之後唔使次次打密碼,仲可以有效防止 brute-force attack。今次同大家 step-by-step 搞掂 SSH Key 設定,無論你係 DevOps 工程師定係新手管理員都啱用。 SS...

點解要學 SSH 密鑰認證?

如果你仲用緊密碼 login server,老實講,你等緊俾人爆破。SSH 密鑰認證(SSH Key Authentication)係目前最安全又方便嘅遠端登入方式,用咗佢之後唔使次次打密碼,仲可以有效防止 brute-force attack。今次同大家 step-by-step 搞掂 SSH Key 設定,無論你係 DevOps 工程師定係新手管理員都啱用。

SSH 密鑰認證原理 — 公鑰同私鑰

SSH 密鑰認證嘅核心概念係非對稱加密(Asymmetric Cryptography)。你會產生一對密鑰:私鑰(Private Key)放喺你部機,千祈唔好俾任何人;公鑰(Public Key)就放喺你要登入嘅 Server 上面。當你嘗試登入嗰陣,Server 會用你嘅公鑰加密一個 challenge 發俾你,你嘅機要用私鑰解密返先可以通過驗證。成個過程冇密碼傳輸,安全好多。

🔗 參考資料:NVD NIST 漏洞資料庫

👉 延伸閱讀:Linux Server 安全加固 6 步搞掂 — Defense in Depth 實戰指南

Step 1:產生 SSH 密鑰對

喺你本地機(Mac / Linux / WSL)打開 Terminal,行以下指令:

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

呢度用咗 ed25519 演算法,因為佢比傳統 RSA 更快更安全,密鑰長度仲短好多。系統會問你:

  • 儲存位置:直接 Enter 用預設 ~/.ssh/id_ed25519
  • Passphrase:建議加一個 passphrase,多一層保護。就算私鑰俾人偷咗,冇 passphrase 都用唔到

想檢查你嘅密鑰係咪成功產生:

ls -la ~/.ssh/
# 應該見到 id_ed25519(私鑰)同 id_ed25519.pub(公鑰)

Step 2:Copy 公鑰去 Remote Server

最簡單嘅方法係用 ssh-copy-id

ssh-copy-id -i ~/.ssh/id_ed25519.pub user@your-server-ip

如果部機冇 ssh-copy-id(例如 macOS 舊版),可以手動搞:

cat ~/.ssh/id_ed25519.pub | ssh user@your-server-ip "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys && chmod 600 ~/.ssh/authorized_keys && chmod 700 ~/.ssh"

呢個 command 會自動建立 .ssh folder,將公鑰 append 入 authorized_keys,仲會 set 返正確嘅 permission。

Step 3:測試 SSH 密鑰認證登入

試嚇用新密鑰登入:

ssh user@your-server-ip

成功嘅話你會直接入到 server,唔使打密碼(除非你 set 咗 passphrase)。如果失敗,Check 嚇以下幾樣嘢:

  • Server 嘅 /etc/ssh/sshd_config 入面 PubkeyAuthentication yes 係咪 enable 咗
  • ~/.ssh permission 係咪 700
  • ~/.ssh/authorized_keys permission 係咪 600
  • ssh -v user@server debug 睇 verbose log

Step 4:強化 SSH 密鑰認證安全設定

成功用到 SSH Key 之後,建議即刻做以下硬化(hardening)設定。編輯 Server 嘅 sshd 設定檔:

sudo vim /etc/ssh/sshd_config

# 加入或修改以下設定:
PasswordAuthentication no        # 禁止密碼登入
PermitRootLogin prohibit-password # Root 只可用 key 登入
MaxAuthTries 3                   # 限制嘗試次數
ClientAliveInterval 300          # 5 分鐘冇反應就 timeout
ClientAliveCountMax 2            # 最多 2 次 alive check

改完 restart sshd:

sudo systemctl restart sshd

⚠️ 重點:改完 PasswordAuthentication no 之前,一定要 confirm SSH Key 登入係 work 嘅!唔係你會 lock 死自己出唔返嚟。建議開多個 Terminal session 測試,確保冇問題先 close 原有 session。

SSH 密鑰認證進階技巧:Config File 管理多個 Server

當你有十幾廿部 server,每部唔同 key 唔同 user,點管理?答案係 ~/.ssh/config

# ~/.ssh/config
Host prod-web-01
    HostName 10.0.1.100
    User admin
    IdentityFile ~/.ssh/id_ed25519_prod
    Port 22

Host dev-server
    HostName dev.example.com
    User developer
    IdentityFile ~/.ssh/id_ed25519_dev
    Port 2222

之後直接 ssh prod-web-01 就得,唔使記 IP、唔使記 user、唔使次次打 -i。慳返好多時間。

SSH 密鑰認證常見問題 FAQ

Q: ed25519 同 RSA 4096 邊個好?
A: ed25519 係現代曲線加密,速度更快、密鑰更短、安全性同等甚至更高。除非你要兼容好舊嘅系統,否則一律用 ed25519。

Q: 私鑰唔見咗點算?
A: 即刻 generate 新 key pair,replace 所有 server 上面嘅舊公鑰。如果有 backup 就 restore。所以密鑰管理係 critical — 建議用 hardware security key(YubiKey 之類)做進階保護。

Q: 同一條 key 可唔可以用喺多部 server?
A: 技術上可以,但安全上唔建議。最好每個 environment(prod / staging / dev)用唔同 key pair,咁樣就算一條 key 出事都唔會影響全部。

總結:SSH 密鑰認證係基本功

SSH 密鑰認證係每個 IT 人必須掌握嘅基本功。由 generate key、copy 公鑰、到硬化 Server 設定,成個流程唔使 10 分鐘就搞掂,但安全效益係幾何級數咁升。記住黃金法則:先測試 key login work,再 disable password login。希望呢篇 SSH 密鑰認證教學幫到你哋,有問題歡迎留言討論!

#技術分享 #SSH #安全 #server #Server