Linux 伺服器管理 資安實務 SSH

從金鑰生成到配置完整教學

在管理遠端伺服器(Server)時,傳統的密碼登入不僅繁瑣,還容易受到暴力破解攻擊。透過設定 SSH 金鑰對(SSH Key Pair),我們可以實現免密碼登入,同時大幅提升系統連線的安全性。本篇文章將帶您一步步完成從本機端產生金鑰,到將公鑰傳送至遠端伺服器的完整設定流程。

1 為什麼需要使用 SSH 金鑰登入?

相較於傳統的密碼驗證方式,SSH 金鑰驗證採用非對稱加密技術,能有效抵禦自動化腳本的密碼猜測攻擊。以下是兩種驗證方式的關鍵差異:

比較項目 傳統密碼登入 SSH 金鑰登入
安全性 較低(容易被暴力破解) 極高(非對稱加密,幾乎無法破解)
便利性 每次連線皆需手動輸入密碼 免輸入密碼,一鍵快速連線
自動化支援 不利於腳本自動化部署 完美支援 CI/CD 與自動化任務
💡 提示:目前最推薦的加密演算法為 Ed25519,它比傳統的 RSA 演算法更快速、安全,且生成的金鑰長度更短。

2 產生 SSH 金鑰對(以 Ed25519 為例)

首先,我們需要在您的本機端(Client)產生一組全新的 SSH 金鑰對。請開啟您的終端機(Terminal)並輸入以下指令:

bash – 本機端終端機
ssh-keygen -t ed25519 -C "your_email@example.com"

執行後,系統會詢問您要將金鑰儲存在哪個位置。強烈建議直接按 Enter 使用預設路徑(通常是 ~/.ssh/id_ed25519)。接著系統會詢問是否要設定密語(passphrase),若為了極致便利可直接留空按 Enter,但若追求最高安全性,建議設定一組密語來保護您的私鑰。

⚠️ 資安警告:產生的金鑰對包含公鑰(Public Key)私鑰(Private Key)。請絕對不要將您的私鑰(如 id_ed25519,沒有 .pub 副檔名的檔案)分享給任何人或上傳至公開的網路空間!

3 將公鑰傳送至遠端伺服器

產生金鑰後,接下來要將公鑰(id_ed25519.pub)複製到遠端伺服器的授權清單中。最簡單的方法是使用 ssh-copy-id 指令:

bash – 本機端終端機
ssh-copy-id username@your_server_ip

請將 username 替換為您在伺服器上的使用者名稱,your_server_ip 替換為伺服器的 IP 位址。在此步驟中,系統會最後一次要求您輸入遠端伺服器的密碼,以驗證您的身份。完成後,公鑰就會自動寫入遠端伺服器的 ~/.ssh/authorized_keys 檔案中。

4 測試連線與進階安全性設定

設定完成後,您可以試著重新連線至伺服器。這次,系統應該會直接登入,而不會再要求輸入密碼:

bash – 測試連線
ssh username@your_server_ip

🛡️ 強化伺服器安全:停用密碼登入

確認免密碼登入成功後,我們應該進一步關閉伺服器的密碼登入功能,讓伺服器只接受 SSH 金鑰連線,徹底杜絕暴力破解的風險。請在伺服器上編輯 SSH 設定檔 /etc/ssh/sshd_config,確保以下項目已正確設定:

PasswordAuthentication no
PubkeyAuthentication yes
PermitRootLogin prohibit-password

修改完成後,別忘了重新啟動 SSH 服務以套用新設定:

bash – 遠端伺服器端
sudo systemctl restart sshd

恭喜!您已經成功完成 SSH 免密碼登入設定,這將為您的專案與伺服器帶來更高的連線效率與無懈可擊的安全性保障。