安全加固

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

打开页面