安全加固

CentOS 上如何關閉 SSH 密碼登入,同時避免把自己鎖在門外

一篇面向實作的說明,講清楚什麼時候該用 centos_disable_password_ssh.sh 關閉密碼登入、它會修改哪些 SSH 設定,以及怎樣避免把伺服器直接鎖死。

閱讀約 7 分鐘 · 2026-04-07

前提是金鑰登入已經可用

這支腳本不是「幫你配置 SSH 公鑰」的那一步,而是「在公鑰登入已經確認可用之後,正式關閉密碼登入」的那一步。

很多人出問題,不是 SSH 本身壞了,而是先把 PasswordAuthentication 關掉,之後才發現目標帳號根本沒有可用的 authorized_keys,或者公鑰放錯了使用者目錄。

腳本會修改哪些 SSH 設定

腳本會把 PubkeyAuthentication 設為 yes,把 AuthorizedKeysFile 設為 .ssh/authorized_keys,同時把 PasswordAuthentication、KbdInteractiveAuthentication 和 ChallengeResponseAuthentication 一起關掉。

它不會把 UsePAM 也一起關掉。對很多老舊 CentOS 主機來說,關閉 PAM 並不能幫助達成「只允許金鑰登入」,反而可能帶來工作階段處理上的副作用。

centos_disable_password_ssh.sh 檢查 authorized_keys、執行 sshd -t 校驗並成功重新載入 sshd 時的終端輸出
一次正常執行應先看到 authorized_keys 檢查,再看到 sshd_config 備份、驗證設定變更、sshd -t 校驗,最後才是 sshd 重新載入。
  • 修改設定前先檢查 authorized_keys 是否存在
  • 自動備份帶時間戳的 sshd_config
  • 重新載入前先執行 sshd -t
  • 校驗失敗會自動還原備份

線上主機的安全執行方式

更穩妥的方式是保留目前的 SSH 工作階段不動,另外開第二個工作階段執行腳本,再用第三次全新連線測試金鑰登入是否正常,最後才關閉舊連線。

如果金鑰屬於非 root 使用者,執行時要帶上 TARGET_USER=<使用者名稱>,讓腳本去檢查正確的 authorized_keys。很多接手的老伺服器,問題就出在公鑰是一般使用者的,但執行腳本的人預設按 root 去改。

相關專題

CentOS 7 維運恢復

面向仍在運行 CentOS 7 的遺留主機,集中處理 yum 源失效、鏡像倉庫 404、Docker 資料遷移等維運恢復場景。

查看專題

問題頁面

為什麼在 CentOS 上關閉 SSH 密碼登入後就連不上了

最常見的原因是先關閉了 PasswordAuthentication,卻沒有先確認目標帳號已經存在可用的 authorized_keys,並且沒有先做一次成功的金鑰登入驗證。

打開頁面