前提是金鑰登入已經可用
這支腳本不是「幫你配置 SSH 公鑰」的那一步,而是「在公鑰登入已經確認可用之後,正式關閉密碼登入」的那一步。
很多人出問題,不是 SSH 本身壞了,而是先把 PasswordAuthentication 關掉,之後才發現目標帳號根本沒有可用的 authorized_keys,或者公鑰放錯了使用者目錄。
腳本會修改哪些 SSH 設定
腳本會把 PubkeyAuthentication 設為 yes,把 AuthorizedKeysFile 設為 .ssh/authorized_keys,同時把 PasswordAuthentication、KbdInteractiveAuthentication 和 ChallengeResponseAuthentication 一起關掉。
它不會把 UsePAM 也一起關掉。對很多老舊 CentOS 主機來說,關閉 PAM 並不能幫助達成「只允許金鑰登入」,反而可能帶來工作階段處理上的副作用。
- 修改設定前先檢查 authorized_keys 是否存在
- 自動備份帶時間戳的 sshd_config
- 重新載入前先執行 sshd -t
- 校驗失敗會自動還原備份
線上主機的安全執行方式
更穩妥的方式是保留目前的 SSH 工作階段不動,另外開第二個工作階段執行腳本,再用第三次全新連線測試金鑰登入是否正常,最後才關閉舊連線。
如果金鑰屬於非 root 使用者,執行時要帶上 TARGET_USER=<使用者名稱>,讓腳本去檢查正確的 authorized_keys。很多接手的老伺服器,問題就出在公鑰是一般使用者的,但執行腳本的人預設按 root 去改。