启用密钥登录后如何关闭密码登录
发布时间:2026-02-28 13:57       
更新时间:2026-03-01 00:08
先说一个习惯:改 SSH 配置之前,保留一个已经登录的会话不要退出,所有验证都在这根"保险绳"还连着的窗口里做。
准备条件
确认密钥登录本身是通的。另开一个终端用密钥连一次:`ssh -i ~/.ssh/id_ed25519 root@服务器IP`,能正常进入再动配置,否则等于把钥匙锁在屋里。顺带 `cat ~/.ssh/authorized_keys` 检查里面放的是打算长期使用的公钥,别把测试用的钥匙固化进去。
第一步:备份并修改配置
执行 `cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak`,然后编辑文件,找到或添加这一行:
```
PasswordAuthentication no
```
顺带确认 `PubkeyAuthentication yes` 处于启用状态。注意两点:改的是 sshd_config,不是长得很像的 ssh_config;同名参数可能出现多次,行首带井号的只是注释,真正生效的是最后一行,动手前用 `grep -n PasswordAuthentication /etc/ssh/sshd_config` 把所有出现位置看全。
第二步:检查语法并重载
`sshd -t` 没有任何输出说明配置合法,有输出时会把文件名和行号一起打印出来,改到无输出为止。接着 `systemctl reload sshd`,reload 不会踢掉现有连接,比 restart 稳妥,这也是保底会话能继续用的前提。
第三步:新窗口验证
再开一个全新终端尝试连接,密钥能登录即通过。想确认密码确实被禁,加参数强制走密码:`ssh -o PubkeyAuthentication=no root@服务器IP`,预期直接收到 Permission denied,连输密码的机会都没有。
常见报错与处理
改完后谁都登不进来,多半是 authorized_keys 权限不对:`~/.ssh` 目录要 700,`authorized_keys` 文件要 600,权限过宽 sshd 会直接拒绝公钥。SELinux 启用的机器上下文异常也会拒绝,用 `restorecon -Rv ~/.ssh` 修复。真被锁在外面,就走云控制台的 VNC 登录改回配置。
顺带的加固建议:root 直接登录可以一并收紧,sshd_config 里 PermitRootLogin prohibit-password 允许密钥、拒绝密码,比完全禁掉更平滑;新版 OpenSSH 还支持在 /etc/ssh/sshd_config.d/ 目录放独立配置片段,改完同样 `sshd -t` 验证再重载。片段文件名带序号,加载顺序一目了然。
顺云云服务器控制台提供 VNC 通道兜底,但日常还是靠规范操作避免走到这一步。改配置胆子要小,验证次数要多。