安全加固

centos_disable_password_ssh.sh

適用於需要從密碼登入切換到僅金鑰登入的 CentOS 或類似 OpenSSH 主機。腳本只檢查目標使用者的 authorized_keys 檔案非空,接著修改 sshd_config 並在重新載入服務前校驗語法;檔案非空不代表操作者持有相符的私鑰。

一鍵命令

curl -fL 'https://www.helper.sh/centos_disable_password_ssh.sh' -o './centos_disable_password_ssh.sh'

此命令只會下載本站檔案,不會執行。請先檢查儲存的原始碼並核對版本,再決定是否執行。

核對已下載檔案

與本頁面建置時內建的確切位元組比較。檔案僅在目前分頁處理,此工具不上傳、不持久儲存檔案。上限2 MiB。

預期 SHA-256
8605b22d876f2d661cfb54990bdf634a9505cb55f00653d471358085db4e627e

內建檔案位元組數: 2874

儲存校驗檔案

將腳本與校驗檔案儲存在同一目錄。Linux 安裝 GNU Coreutils 後可用下方命令僅檢查位元組,不執行腳本;使用此命令時需保留原檔名。

sha256sum --check './centos_disable_password_ssh.sh.sha256'

尚未比較。

校驗值與腳本來自同一網站,不是獨立簽章。一致不證明安全、上游相依項目真實可信或適合本機;可變遠端相依項目需單獨審閱。

查看驗證與限制

執行要求

  • CentOS 或類似 OpenSSH 主機
  • 需要 root 權限或 sudo
  • 目標使用者已存在非空 authorized_keys 檔案
  • 系統中存在 /etc/ssh/sshd_config

適用場景

  • 在金鑰登入準備完成後關閉 SSH 密碼登入
  • 在 CentOS 維運工作中標準化僅金鑰登入加固流程
  • 降低暴露於公網的 SSH 主機遭遇密碼爆破的攻擊面

腳本亮點

  • 如果目標使用者還沒有 authorized_keys,會直接中止,避免誤鎖伺服器
  • 以冪等方式修改 sshd_config,而不是盲目附加設定
  • 如果 sshd -t 校驗失敗,會自動還原原始設定

推薦流程

  1. 先確認目標使用者已經安裝好 SSH 公鑰。
  2. 從 helper.sh 取得腳本,並用 sudo 或 root 執行。
  3. 讓腳本自動修改 sshd_config、校驗語法並重新載入 sshd。
  4. 關閉目前工作階段前,先另外開一個 SSH 連線確認金鑰登入仍然正常。

安全提示

  • 在另一個終端確認金鑰登入可用之前,不要直接執行這個腳本。
  • 如果公鑰屬於非 root 使用者,請透過 TARGET_USER=<使用者名稱> 指定目標帳戶。
  • 腳本會保留 UsePAM yes,避免引入不必要的工作階段處理問題。

相容範圍與限制

  • 適用於 CentOS 或使用 `sshd` 服務的類似 OpenSSH 系統。需要 root、getent、cut、sshd -t,以及 systemctl 或 service。唯一輸入為 TARGET_USER,預設取 SUDO_USER,否則為 root。沒有 dry-run。
  • 預檢只確認目標使用者的 ~/.ssh/authorized_keys 非空,不驗證金鑰格式,也不能證明操作者持有相符私鑰。必須先在另一個終端成功使用金鑰登入。
  • 腳本只編輯 /etc/ssh/sshd_config,不檢查 Include 檔案。語法檢查失敗會自動還原備份;但校驗通過後若 reload 和 restart 都失敗,新設定會保留,不會自動回復。

受影響的檔案、服務與資料

  • /etc/ssh/sshd_config:設定 PubkeyAuthentication yes 與 AuthorizedKeysFile .ssh/authorized_keys;停用 PasswordAuthentication、KbdInteractiveAuthentication 和 ChallengeResponseAuthentication;保留 UsePAM yes。
  • 修改前建立 /etc/ssh/sshd_config.bak.* 時間戳備份。先 reload sshd,失敗時嘗試 restart。不修改 authorized_keys、使用者密碼、防火牆連接埠或應用程式資料。

唯讀核驗

  • 變更前以 `getent passwd USER` 確認目標帳戶與 home,再確認對應 `.ssh/authorized_keys` 非空,並在第二個終端測試金鑰登入。
  • 唯讀查看生效設定:`sudo sshd -T | grep -E '^(pubkeyauthentication|authorizedkeysfile|passwordauthentication|kbdinteractiveauthentication|challengeresponseauthentication|usepam) '`。
  • 經授權的維護操作後檢查 `sudo sshd -t`、`sudo systemctl status sshd`(或 `sudo service sshd status`),並測試新的金鑰登入。成功前保持原工作階段開啟。

失敗後的下一步

預檢失敗時不會修改設定。若 sshd -t 失敗,會以備份覆蓋 sshd_config。若 reload 和 restart 都失敗,請保持既有工作階段並查看 `sudo journalctl -u sshd -n 100 --no-pager`;必要時手動還原時間戳備份、執行 `sudo sshd -t`,再復原服務,確認前不要關閉工作階段。

參考文件

CentOS 7 手冊存檔來自鏡像站。OpenBSD 現行手冊僅供上游參考,不保證與 CentOS 7 隨附版本完全一致。

先下載、審閱並核對版本,再決定是否執行。雜湊只能識別這一版位元組,不能證明安全。pipe 命令會立即執行遠端內容;上游依賴也可能變動。

相關專題

CentOS 7:選擇復原工作

變更已結束支援的主機前,先區分軟體庫故障、SSH 存取問題與 Docker 儲存壓力。

查看專題

問題頁面

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

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

打開頁面