密码过期是ssh登录失败最隐蔽原因,需用passwd -s和chage -l检查状态,确诊后用sudo passwd重置密码以清除过期标记。

密码过期是 SSH 登录失败最隐蔽也最常见的原因之一——输入完全正确的密码,依然提示 Permission denied, please try again,根本不会告诉你“密码已过期”。排查需绕过表象,直查账户认证状态。
确认当前用户密码是否已过期
登录服务器本地(或通过控制台、其他可用账号),运行以下命令:
-
快速状态检查:
passwd -S username—— 若输出中 Status 字段显示 Password expired,即为确诊 -
详细策略查看:
chage -l username—— 关注 Password expires 和 Password inactive 两行。若“Password expires”日期早于今天,且“Password inactive”未设或已过期,则密码已失效
区分“过期”和“即将过期”
系统通常允许密码过期后仍可登录一次(用于强制修改),但部分加固环境(如启用 PAM pam_faildelay 或自定义策略)会直接拒绝。关键看行为:
Linux系统管理专家,覆盖12大模块:用户权限、SSH、存储、网络、systemd、防火墙、日志监控、备份恢复、TLS证书、Ansible、容器、IaC。提供配置、验证、加固、监控、备份、自动化、故障排查、回滚闭环。关键词:useradd、sudo、sshd_config、chmod、SEL...
- 输对密码 → 立即断开连接,无重试提示 → 很可能是 已过期 + 账户被锁 或 PAM 拒绝
- 输对密码 → 提示 please try again,但始终不进系统 → 更倾向 密码过期但允许改密,此时应尝试在登录时直接修改(部分终端支持)
紧急修复与预防
若确认过期,立即执行:
-
重置密码并解除过期状态:
sudo passwd username(输入新密码后,系统自动清除过期标记) -
临时禁用过期限制(仅应急):
sudo chage -M 99999 username(设密码永不过期) -
检查全局策略:
sudo cat /etc/login.defs | grep -E 'PASS_MAX_DAYS|PASS_WARN_AGE',避免同类问题批量发生
注意:单纯改密码不等于解决——必须用 passwd 命令重设,而非只改 /etc/shadow;且修改后无需重启 sshd,PAM 会实时生效。










