安全加固

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,并且没有先做一次成功的密钥登录验证。

打开页面