云服务器用SSH密钥登录后怎么彻底关掉密码登录?
“配好了密钥,但还是担心有人暴力破解密码?”
—— 来自一位正在部署个人项目的开发者在配置完SSH后的疑问
在完成云服务器的初始化设置后,启用SSH密钥认证是提升安全性的关键一步。然而,仅配置密钥并不等于完全安全。只要密码登录功能仍然开启,系统就存在被暴力破解的风险。真正的防护需要将密码验证机制从根源上关闭。
为什么必须手动禁用密码登录?
- 默认情况下,大多数云服务器镜像同时支持密码和密钥两种登录方式
- 即使绑定了SSH密钥,系统仍会响应密码验证请求
- 开放密码登录等于保留了一个可被自动化脚本持续攻击的入口
- 关闭密码登录能有效阻断基于弱口令的爆破行为
操作前的核心准备事项
- 确保本地已生成并妥善保管私钥文件(如 id_ed25519 或 id_rsa)
- 确认当前用户具备通过密钥成功登录的能力,建议保持一个活跃会话
- 检查目标账户是否拥有执行权限变更操作的资格(通常为 root 或具有等效权限的账户)
- 备份当前的 SSH 配置文件,防止误操作导致无法连接
完整禁用流程分解
步骤一:备份现有SSH配置
cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak
步骤二:编辑主配置文件
vim /etc/ssh/sshd_config
步骤三:修改关键参数
| 配置项 | 原值示例 | 修改后值 | 作用说明 |
|---|---|---|---|
| PasswordAuthentication | yes | no | 禁止使用密码进行身份验证 |
| ChallengeResponseAuthentication | yes | no | 关闭挑战-响应式认证(PAM相关) |
| UsePAM | yes | no | 禁用PAM模块,避免绕过限制 |
| PubkeyAuthentication | no | yes | 确保启用公钥认证 |
步骤四:重启服务使配置生效
systemctl restart sshd
步骤五:验证新连接状态
打开新的终端窗口,尝试使用密码登录同一台服务器。预期结果为连接立即拒绝或输入密码无效。而使用私钥则可正常进入系统。
常见风险与规避方法
“改完配置连不上了怎么办?”
- 所有修改必须在已有会话中完成,切勿关闭原始连接
- 编辑配置时避免语法错误,例如多余的空格或拼写失误
- 若因错误配置导致失联,可通过云平台提供的VNC控制台登录修复
- 部分系统版本要求同时关闭 UsePAM 才能彻底阻断密码路径
不同Linux发行版的细微差异
| 操作系统类型 | SSH服务名称 | 默认配置路径 | 权限目录要求 |
|---|---|---|---|
| Ubuntu 20.04+ | sshd | /etc/ssh/sshd_config | ~/.ssh 目录权限需为 700 |
| CentOS Stream 9 | sshd | /etc/ssh/sshd_config | authorized_keys 文件权限需为 600 |
| Debian 12 | ssh | /etc/ssh/sshd_config | 用户主目录不可设为全局可写 |
| AlmaLinux 9 | sshd | /etc/ssh/sshd_config | SELinux策略不影响时无需额外配置 |
自动化部署中的标准实践
- 在初始化脚本中预置公钥内容至 ~/.ssh/authorized_keys
- 将 PasswordAuthentication=no 写入基础镜像配置
- 结合用户数据(User Data)实现首次启动即锁定密码登录
- 使用配置管理工具统一推送安全策略
安全加固的后续动作
- 移除不必要的系统账户,减少潜在攻击面
- 调整防火墙规则,限制SSH端口的访问来源IP范围
- 启用登录日志监控,记录所有接入尝试
- 定期轮换密钥对,尤其是多人协作环境
FAQ:购买部署前常见问题
- 没有绑定密钥前可以直接关闭密码登录吗?
- 不可以。必须先完成密钥配置并验证可用性,否则将导致服务器无法远程访问。
- 关闭密码登录后还能通过网页控制台登录吗?
- 可以。云平台提供的VNC或KVM式控制台不受SSH配置影响,仍支持账号密码输入。
- 是否会影响其他基于密码的身份验证场景?
- 不会直接影响本地终端或图形界面的密码使用,仅作用于SSH网络连接过程。
- 能否只对特定用户关闭密码登录?
- 可以。通过 Match User 指令针对个别账户设置独立规则,其余用户维持原有方式。
- ED25519 和 RSA 密钥哪种更适合用于免密登录?
- ED25519 算法更短、更快且安全性更高,推荐作为首选;RSA 至少应使用 2048 位以上长度。
- 修改配置文件时需要注意哪些格式规范?
- 每条指令前不能有空行,参数与值之间用空格分隔,注释以 开头,不支持中文字符。
- 重启sshd服务会导致现有连接中断吗?
- 已有会话通常保持稳定,但新建连接会应用新策略。建议在维护窗口期执行此类变更。