Permission denied大概是SSH登录CentOS时最让人头疼的报错之一,因为它只告诉你“拒绝访问”,却不告诉你具体原因。有人以为是密码敲错了,有人怀疑服务器被封了,实际上这个报错背后藏着好几种可能:密码认证被关闭、root账号禁止登录、密钥文件权限过大、SELinux上下文错误等等。这篇文章按排查优先级逐项分析,配合日志定位,帮你把问题真正找出来。

先看日志,确定失败的具体原因
盲目猜测效率很低,正确的做法是先查看sshd的日志。CentOS 7及以上版本的SSH日志一般写入/var/log/secure文件,CentOS 8以及部分系统使用journalctl统一管理。通过日志中的具体报错信息,可以快速锁定问题方向。
tail -f /var/log/secure # 或者 journalctl -u sshd -f
日志中常见的几种关键字对应不同问题:Failed password说明密码验证失败,多半是密码错误或账号被锁定;User root not allowed because not listed in AllowUsers说明用户不在白名单里;Authentication refused: bad ownership or modes则是典型的权限问题,指向authorized_keys文件或.ssh目录权限过大;如果是Permission denied (publickey,gssapi-keyex,gssapi-with-mic)这种括号列表,括号里列出的就是服务器当前允许的认证方式,注意观察里面有没有password,如果没有,说明密码登录已经被禁用了。
密码认证相关的几种情况
客户端使用密码登录时报Permission denied,首先确认密码本身是否正确。注意CentOS默认对连续失败次数有限制,多次输错密码后账号可能被pam模块临时锁定,此时即使输入正确密码也会被拒绝,日志里通常会出现account locked之类的字样,可以用faillock --user 用户名 --reset解锁(CentOS 8+)。
其次检查sshd配置中是否关闭了密码认证。编辑/etc/ssh/sshd_config,找到下面两项:
PasswordAuthentication yes PermitRootLogin yes
如果PasswordAuthentication被设为no,客户端就无法用密码登录,只能走密钥认证;如果PermitRootLogin是no或without-password,root用户用密码登录也会被拒。修改后执行systemctl restart sshd重启服务生效。另外要留意,云服务器上安全组或防火墙虽然不会直接产生Permission denied(端口不通通常是连接超时),但某些加固镜像会额外修改PAM策略,需一并确认/etc/pam.d/sshd中是否有访问限制配置。
密钥登录失败:权限是重灾区
使用密钥认证失败时,九成以上是权限问题。sshd对权限要求非常严格,任何一处不符合要求都会在日志中记录Authentication refused: bad ownership or modes并直接拒绝认证。正确的权限组合如下:
chmod 700 /home/用户名/.ssh chmod 600 /home/用户名/.ssh/authorized_keys chown -R 用户名:用户名 /home/用户名/.ssh
家目录本身权限也不能太开放,不能对group和others开放写权限,即chmod 755 /home/用户名或更严格。很多管理员习惯用root账号操作后忘了改回属主,或者用chmod 777图省事,结果反而触发sshd的安全检查导致登录失败。
除了传统权限位,SELinux上下文也是CentOS特有的坑。如果authorized_keys是在别处创建后复制过来的,安全上下文可能不正确,可用以下命令修复:
restorecon -Rv /home/用户名/.ssh # 查看上下文 ls -Z /home/用户名/.ssh/authorized_keys
另外,如果通过ssh -vvv 用户名@服务器IP在客户端打开详细调试输出,能看到本机到底尝试了哪些私钥、服务器接受了哪些认证方式,对于判断“是没提供密钥还是密钥被拒”非常有帮助。
用户与访问控制配置检查
sshd还支持多层访问控制,任何一层不匹配都会返回Permission denied。检查/etc/ssh/sshd_config中是否配置了AllowUsers、AllowGroups、DenyUsers等指令,如果你的账号不在允许列表内,无论密码还是密钥都无法登录。同时确认/etc/nologin文件是否存在——该文件存在时所有普通用户都无法登录,只有root可以。
账号本身的状态也要排查:passwd -S 用户名可以查看账号是否被锁定(显示L表示锁定),usermod -U 用户名解锁;检查/etc/passwd中该用户的shell是否被设置为/sbin/nologin或/bin/false,这种情况日志中报的是别的错误但表现也类似拒绝。此外/etc/hosts.deny和/etc/hosts.allow中如果配置了TCP Wrapper规则拒绝你的来源IP,同样会导致连接被拒。按这个顺序排查下来,绝大多数Permission denied问题都能定位并解决。
CentOS SSHPermission deniedSSH配置修改时间:2026-09-16 15:04:40