SSH服务器拒绝密码并非单一故障,而是整个认证链路中某个环节被拦截,常见原因集中在密码状态、sshd配置、PAM认证规则、网络层封禁四类。排查时先看报错信息,再对号入座,通常能在几分钟内定位问题。
从报错信息拆解拒绝密码的底层逻辑
密码被拒时服务器到底在说什么
输入正确密码仍被拒绝时,终端通常只返回一句Permission denied, please try again,这句话背后的含义很多,服务器不会告诉你具体卡在哪一环,要判断真实原因,最直接的动作是查看认证日志。
- CentOS/RHEL系列:执行
tail -n 50 /var/log/secure - Ubuntu/Debian系列:执行
tail -n 50 /var/log/auth.log - 通用查询方式:执行
sudo journalctl -u sshd --since "5 minutes ago"
日志里会给出具体拒绝原因,例如出现Failed password for root from 192.168.1.10 port 22 ssh2仅意味着密码输入错误;若出现User root not allowed because account is locked则是账号被锁定;Authentication refused: bad ownership or modes for /home/user/.ssh/authorized_keys直接指向文件权限不对,通过日志区分拒绝原因,比盲目修改配置高效得多。
密码错误与策略拦截的区别
很多人遇到拒绝后反复重置密码,但重置后问题依旧,这往往不是密码内容本身的问题,行业共识认为,密码重置仅解决密码已更改但未同步的情况,而策略层拦截会让正确密码同样失效,典型的策略拦截包括账号过期、密码过期未提醒、登录时间限制、用户组权限变更等因素,此时密码只是一个“入场券”,但入场券之外的身份状态已经变为不可用。
ssh服务器拒绝密码什么原因:五大高频场景逐一核查
账号本身被锁定或过期
Linux系统账号有生命周期管理,密码过期、账号被管理员手动锁定、连续输错密码触发PAM锁定,都会出现“密码正确但被拒”的现象,核查步骤:
- 查看当前账号状态:
chage -l 用户名,关注Account expires和Password expires两栏。 - 检查锁定标志:
passwd -S 用户名,若显示L说明已被锁定。 - 解除锁定:
passwd -u 用户名,并重新设置密码:passwd 用户名。

运维场景常见于服务器从模板恢复后,模板自带过期时间策略,账号在特定日期后强制失效,即使输入正确密码,也会被拒绝并提示密码无效,此时没有任何错误码,只有日志中的Password expired信息。
sshd_config配置项关闭了密码登录
SSH服务端的密码认证默认是开启的,但不少服务器为了安全加固会关闭,检查/etc/ssh/sshd_config,重点查看以下几项:
PasswordAuthentication yes若为no,密码认证直接关闭,输入什么都不行。PermitRootLogin yes若为prohibit-password或no,root会被拒绝,普通用户不受影响。PubkeyAuthentication yes仅密钥登录的常见设定,密码认证被关闭。
修改完配置文件必须重启sshd服务:systemctl restart sshd,这里注意,重启前先用sshd -t验证配置语法,避免语法错误导致重启失败后ssh完全断掉。
PAM模块拦截导致ssh服务器拒绝密码
PAM(可插拔认证模块)在密码验证之后介入,决定是否放行,登录报错时若日志出现:
pam_faillock(sshd:auth): user root (0) tally多次输错触发锁定pam_env(sshd:session): Unable to open env file /etc/environment环境文件缺失导致会话建立失败pam_nologin(sshd:auth): user root has uid 0/etc/nologin文件存在时阻止非root登录
锁定解除方式:faillock --user 用户名 --reset,检查是否有/etc/nologin文件挡住登录,若存在则删除,PAM配置位于/etc/pam.d/sshd,默认配置一般不会出问题,但安全加固工具(如Fail2ban、PAM Tally)会自动写入新规则,需要留意策略时间窗口。
防火墙、Fail2ban与IP白名单拦截
本地网络过滤同样会造成密码被拒的假象,服务器端防火墙(iptables/firewalld)可能在TCP层直接丢弃连接,但更多场景是Fail2ban这类入侵检测工具在连续失败后临时封禁IP,检查命令:
firewall-cmd --list-all查看当前放行规则fail2ban-client status sshd
查看是否有IP被临时封禁
ss -ntlp | grep :22确认sshd进程是否正常监听
若确认被Fail2ban封禁,执行fail2ban-client set sshd unbanip 你的本地IP恢复访问,若使用云服务器,还需检查安全组入方向是否放行TCP 22端口,这层拦截发生在操作系统之外,日志中不会留下任何记录。
文件权限与SELinux上下文问题
OpenSSH对关键文件权限有严格要求,权限范围过宽会直接拒绝认证:
~/.ssh目录权限应为700~/.ssh/authorized_keys权限应为600~/.ssh所在的家目录权限不能超过755
修复命令:chmod 700 ~/.ssh && chmod 600 ~/.ssh/authorized_keys,此外SELinux开启状态下,恢复上下文命令:restorecon -Rv ~/.ssh,这类问题在密码认证和密钥认证中都会出现,即便密码完全正确也会触发通用拒绝。
ssh连接不上服务器但密码正确:常见操作错觉
输入法状态与键盘布局引发的密码错位
很多人在图形化桌面终端上输入密码时,中文输入法未切换回英文,导致输入的字符变成全角或拼音组合,全角字符和半角字符完全不同,密码验证时就会判定为错误,建议输入密码前确认终端处于英文半角输入模式,或在服务端临时创建一个纯数字密码验证通路。
换行符与不可见字符混入
复制粘贴密码时容易带入空格、换行符,终端粘贴操作有时会隐式添加r回车符,这个字符在密码字符串中不可见,但系统会当作密码的一部分参与比对,如果密码从密码管理器复制过来,先粘贴到一个文本编辑器中肉眼检查有无空格,再复制到SSH密码输入位置。
ssh连接不上服务器但密码正确与known_hosts冲突
客户端本地~/.ssh/known_hosts中保存的服务器指纹与当前服务器不一致时,会报REMOTE HOST IDENTIFICATION HAS CHANGED,这个提示往往让人误以为密码被拒,实际上服务器在认证前就阻止了连接,清理方法:ssh-keygen -R 服务器IP之后重连。
用表格快速定位ssh服务器拒绝密码的原因
先查看日志,再按表格线索逐项排查,是最高效的路径,下表汇总了报错日志关键字与常见原因之间的对应关系:

| 日志关键信息 | 故障原因 | 解决方向 |
|---|---|---|
Failed password for invalid user |
用户名不存在 | 确认账号是否被删除或拼写错误 |
User xxx not allowed because account is locked |
账号锁定 | passwd -u解除锁定 |
Permission denied (publickey,password) |
密码认证关闭或密码错误 | 检查sshd_config认证选项 |
Connection closed by authenticating user |
PAM模块异常 | 查看PAM日志,重置faillock |
Connection reset by 对端IP |
防火墙丢弃连接 | 检查防火墙规则与安全组 |
Bad owner or permissions |
文件权限超范围 | 修改authorized_keys权限 |
Q&A:围绕ssh服务器拒绝密码什么原因的高频疑问
为什么重置密码后ssh还是拒绝登录
重置密码只能解决密码内容错误的问题,若策略层面仍判定账号锁定或过期,重置动作本身不会触发解锁,执行重置后,需确认账号状态为P(正常密码),同时排查PAM锁定记录是否仍生效,若faillock计数未清零,即使新密码正确也会被拒绝。
ssh服务器拒绝密码时怎么看日志最准确
实时追踪日志命令:journalctl -u sshd -f,该命令持续输出最新认证记录,看到Failed password后立刻检查同时间段有无PAM或faillock字样,多数日志信息是一行事件,但PAM拦截往往由紧随其后的几行组成,搭配时间戳查看同一秒内的全部条目,能辨明认证链路的真正阻断点。
修改sshd_config后密码认证仍不生效怎么回事
修改后必须重启sshd服务,且验证主配置文件无语法错误,执行sshd -t若无返回值说明语法通过,随后systemctl restart sshd,部分云服务器镜像自带tcpwrappers防护,即使sshd配置正确,/etc/hosts.deny中若写入sshd: ALL也会拦死所有密码认证流量,检查该文件与/etc/hosts.allow内容是排查这类问题的关键一步。
图片来源于AI模型,如侵权请联系管理员。作者:酷小编,如若转载,请注明出处:https://www.kufanyun.com/ask/873605.html


评论列表(2条)
这篇文章的内容非常有价值,我从中学习到了很多新的知识和观点。作者的写作风格简洁明了,却又不失深度,让人读起来很舒服。特别是执行部分,给了我很多新的思路。感谢分享这么好的内容!
@树树9574:这篇文章的内容非常有价值,我从中学习到了很多新的知识和观点。作者的写作风格简洁明了,却又不失深度,让人读起来很舒服。特别是执行部分,给了我很多新的思路。感谢分享这么好的内容!