EC2实例SSH登录成功后突然要求修改密码问题求助
我的EC2实例已运行数年,一直用公钥SSH登录,昨天登录成功后突然弹出密码过期需修改的提示,我从未设置过密码过期策略。登录界面提示:
You are required to change your password immediately (root enforced)
Enter current UNIX password:
我已经把实例的根卷分离,挂载到另一个实例上,执行chage -l ubuntu命令查看密码过期配置,输出如下:
Last password change : Aug 27, 2019
Password expires : never
Password inactive : never
Account expires : never
Minimum number of days between password change : 0
Maximum number of days between password change : 99999
Number of days of warning before password expires : 7
解决步骤
1. 修正用户密码过期属性
在挂载了根卷的实例上,先进入根卷挂载目录(假设挂载路径为/mnt/ec2-root),切换到该根环境:
cd /mnt/ec2-root chroot .
执行以下命令锁定ubuntu用户的密码过期规则,避免强制修改:
chage -E -1 -m 0 -M 99999 -I -1 ubuntu
也可以直接编辑/etc/shadow文件,找到ubuntu用户的行,确保字段符合永不过期的配置:
ubuntu:$6$[加密串]:18144:0:99999:7:::
(注:18144是上次改密码的天数,保留原值即可,后续字段分别对应最小修改间隔、最大有效期、警告天数,最后两个空字段表示账户永不过期)
2. 排查强制改密脚本
检查系统和用户的启动脚本,比如/etc/profile、/etc/bash.bashrc、~ubuntu/.bashrc、~ubuntu/.profile,看是否有添加强制触发密码修改的脚本逻辑,找到后删除相关内容。
3. 检查PAM配置
查看PAM相关配置文件,确认是否有强制密码过期校验的规则:
- 打开
/etc/pam.d/common-password,找到包含pam_expire.so的行,将required改为optional:# 修改前 password required pam_expire.so # 修改后 password optional pam_expire.so - 检查
/etc/pam.d/sshd,确保没有添加强制密码修改的PAM规则,若有则注释或删除。
完成以上操作后,将根卷重新挂载回原EC2实例,启动后即可正常登录。
内容的提问来源于stack exchange,提问作者Aman Kashyap

