點解要學 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 咗 ~/.sshpermission 係咪 700~/.ssh/authorized_keyspermission 係咪 600- 用
ssh -v user@serverdebug 睇 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



