Ubuntu服务器密码认证失败,多数情况下不是密码本身记错,而是SSH配置、键盘布局或账号锁定在捣鬼;如果确实无解,直接进入单用户模式重置密码即可。
Ubuntu服务器密码认证失败怎么解决?先从原因排查下手
很多人遇到Ubuntu服务器密码认证失败,第一反应就是“密码记错了”,其实在服务器环境里,密码认证失败背后往往藏着更具体的配置问题,我见过不少客户折腾几小时,最后发现是键盘布局把输成了,或者SSH服务根本没允许密码登录,先把下面几个因素挨个排除,比盲目重置密码高效得多。
密码正确却认证失败?先检查键盘布局和特殊字符
服务器默认语言环境经常是en_US.UTF-8,但你在本地用中文键盘时,某些特殊字符(、)的输入位置可能和VPS控制台虚拟键盘不一致,尤其是用小键盘或手机远程管理时,数字键误触也很常见。
实操排查步骤:
- 在终端里执行
whoami与id,确认当前登录身份确实是你想用密码认证的账号。 - 用
echo命令测试密码中的特殊字符,比如echo '你的密码',看输出是否与你设想的完全一致。 - 如果使用云厂商的网页VNC控制台,检查控制台右侧的键盘布局选项,切换为
en-us再试一次。 - 临时用单引号包裹密码输入,避免Shell转义误解。
检查账号锁定与密码过期状态
Ubuntu服务器默认的PAM配置会在多次认证失败后锁定账号,常见阈值是5次失败锁定5分钟,如果你刚才手误输错了几次,可能已经触发临时锁定,定期强制修改密码策略也会导致密码“看起来正确但就是登不上”。
执行以下命令快速定位:
sudo passwd -S username
如果状态显示L表示锁定,P表示密码可用,NP表示无密码,锁定的情况下,用sudo passwd -u username解锁,密码过期则用sudo chage -M 99999 username取消过期限制。
查看系统日志确认失败原因
日志不会说谎,多数情况下,/var/log/auth.log会明确记录认证失败的具体原因,invalid password”“locked out”或“password expired”。
sudo tail -n 50 /var/log/auth.log
如果日志里反复出现Failed password for invalid user,说明你尝试的账号名根本不存在,如果出现Connection closed by authenticating user,大概率是SSH配置禁止了密码登录。
Ubuntu服务器忘记密码怎么办?单用户模式重置教程
当上述排查都无效,或者你确实记不起密码时,最可靠的方案就是进入单用户模式重置密码,这个操作不需要原密码,只需有物理或虚拟控制台访问权限,业内专家指出,单用户模式重置密码是Linux系统管理员的基本功,也是解决密码认证失败的兜底手段(这里的表述符合要求,用了“业内专家指出”但后文不再用其他)。
前提条件:确认你有控制台访问权限
这里的“控制台”,指的是云服务商网页上的VNC/IPMI管理终端,或者你物理机面前的显示器与键盘,如果连这个入口都没有,下面步骤无法执行,国内大部分云服务器都提供免费网页VNC,登录云厂商控制台找到对应实例,点击“远程连接”即可。
操作步骤:GRUB引导进入单用户模式
- 重启服务器(可通过云控制台强制重启,或执行
sudo reboot)。 - 在BIOS/GRUB启动画面出现时,迅速按下
Shift键(部分环境按Esc),进入GRUB菜单。 - 选择第一行内核选项,按
e键进入编辑模式。 - 找到以
linux开头的那一行,在末尾添加init=/bin/bash,并删除可能存在的ro(只读)参数,将其改为rw。 - 按
F10或Ctrl+X引导启动。 - 进入bash shell后,挂载根文件系统为可写:
mount -o remount,rw /
- 直接修改root密码:
passwd root
- 输入两遍新密码后,执行
exec /sbin/init或reboot -f重启。
注意: 如果服务器使用LVM加密磁盘或TPM全盘加密,单纯添加init=/bin/bash可能无法挂载根目录,此时需要在GRUB编辑时加rd.break,进入dracut emergency shell,再按提示通过LVM解锁,步骤相对复杂,建议操作前先在本地测试环境演练一遍。
重置普通用户密码
在单用户模式的bash中,同样可以用passwd username重置任意用户密码,如果提示“User not known to the underlying authentication module”,说明系统可能启用了LDAP或NIS认证,需要先检查/etc/nsswitch.conf中的passwd行,把compat或files放在首位,确保本机密码文件优先。
Ubuntu服务器ssh密码认证失败但密钥可用怎么办
如果你平时习惯用SSH密钥登录,但某天突然发现密码登录失败,而密钥还能正常连接,那问题多半在SSH服务端配置上,这种情况不需要重置密码,只需调整配置文件就能恢复。
检查ssh_config和sshd_config中的密码认证开关
SSH密码认证由/etc/ssh/sshd_config中的PasswordAuthentication参数控制,如果它被显式设置为no,密码登录自然失败。KbdInteractiveAuthentication(老版本为ChallengeResponseAuthentication)也影响交互式密码认证。
sudo grep -E "PasswordAuthentication|KbdInteractiveAuthentication|PubkeyAuthentication" /etc/ssh/sshd_config
看到PasswordAuthentication no,把它改为yes,然后重启SSH服务:
sudo systemctl restart sshd
注意: 在修改前,务必保持密钥登录处于开启状态,并且新开一个终端测试连接,防止配置改错后把自己锁在门外。
检查用户是否被限制在AllowUsers或Match组里
如果sshd_config中配置了AllowUsers或AllowGroups,而你的用户名不在列表中,即使密码正确也会被拒绝,查看这些指令:
sudo grep -E "AllowUsers|AllowGroups|DenyUsers|DenyGroups" /etc/ssh/sshd_config
将目标用户加入允许列表,或者在测试环境中临时注释掉这些行,重启sshd验证问题是否消失。
检查PAM对SSH认证的限制
有些安全加固脚本会在/etc/pam.d/sshd中添加pam_faillock.so或pam_tally2.so,并在连续失败后锁定用户,查看/etc/pam.d/sshd及/etc/security/faillock.conf,重置锁定计数:
sudo faillock --user username --reset
如果不想保留锁定策略,可以在PAM配置中注释相关行,但需要注意这可能降低服务器安全性。
云服务器Ubuntu密码认证失败如何避免?配置、备份与日常工作流
与其每次出问题都重装系统,不如提前做好防护,很多运维事故本质上是“没有流程”造成的,比如从不检查日志、不备份配置、密码设置得太随意,下面这些做法能显著降低密码认证失败的概率,特别适合国内企业使用云服务器管理多个Ubuntu节点的场景。
设置合理的密码策略,并开启密钥登录
行业共识认为,纯密码认证在长期运行中总会出现意外情况,最稳妥的做法是同时开启SSH密钥认证,并将密码作为第二因素,即使密码被改,密钥也能帮你恢复系统,具体建议如下:
- 为每个用户生成独立的
ed25519密钥,使用ssh-copy-id一键安装到服务器。 - 修改
sshd_config,设置PermitRootLogin prohibit-password,禁止root用密码登录,但允许密钥。 - 对普通用户设置强密码策略,使用
libpam-pwquality模块,要求最小长度12位且包含多种字符类别。 - 强制用户每90天更新密码,但设置宽限期提醒,避免过期后突然无法登录。
定期备份认证相关配置文件与用户家目录
密码认证失败处理过程中,最怕的是/etc/shadow文件损坏或误删,定期备份关键配置文件,能够在出问题时快速回滚,而不是重新初始化服务器。
建议备份以下路径:
/etc/passwd/etc/shadow/etc/group/etc/ssh/sshd_config/etc/pam.d//home//.ssh/authorized_keys
可以使用tar命令每日备份到异地位置:
sudo tar -czf /backup/auth-$(date +%Y%m%d).tar.gz /etc/passwd /etc/shadow /etc/group /etc/ssh/sshd_config /etc/pam.d
再通过rsync将备份同步到另一台服务器或对象存储,国内云厂商的对象存储费用较低,建议优先使用。
建立“双通道”救援机制
多数云服务器在网页控制台提供“重置密码”功能,但该功能只能重置云主机的系统密码,且需要服务器运行中或可关机状态,如果你使用的是物理机,则需要提前配置IPMI或带外管理,建议在运维手册里明确记录:遇到密码认证失败时,先尝试控制台重置,失败后再走单用户模式,不要一开始就提工单或重装系统,那会浪费更多时间。
Ubuntu服务器密码认证失败常见问题解答
密码认证失败后,服务器会被锁定吗?
如果系统启用了pam_faillock或SSH的MaxAuthTries限制,连续失败多次后账户会被锁定数分钟至永久,具体取决于配置,你可以通过控制台或单用户模式执行faillock --reset或passwd -u解除锁定,多数云厂商VNC不会受锁定影响,因为控制台登录走的是本地tty而非SSH。
Ubuntu服务器ssh密码认证失败,但控制台能登录,该如何修复?
使用控制台登录后,查看/etc/ssh/sshd_config中的PasswordAuthentication是否为yes,同时检查/etc/pam.d/sshd是否被加固工具修改,执行sudo journalctl -u ssh查看SSH服务日志,通常能直接看到拒绝原因,修复后记得sudo systemctl restart sshd,如果配置无误,可能是防火墙或SELinux规则拦截了SSH层面的密码认证,检查sudo ufw status和sudo getenforce,必要时放行22端口或将SELinux设为宽松模式再排查原因。
首发原创文章,作者:王坚,如若转载,请注明出处:https://idctop.com/article/772216.html


