前提是密钥登录已经可用
这条脚本不是“帮你配置 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 去改。