如果Ubuntu服务器账号密码忘了,最直接有效的办法就是通过Grub引导菜单进入单用户模式重置密码,或者用Live CD挂载系统后修改shadow文件。这两种方法都不依赖原密码,只要你有物理控制台或相应的远程管理权限就能操作,下面我会结合具体场景,一步步拆解操作细节,并顺带解决你可能会遇到的“重置完密码重启又失效”这类麻烦。
ubuntu服务器账号密码忘了怎么办?先分清你的重置场景
很多人一碰到密码失效就慌了,其实在动手之前,先确认自己属于哪种“忘了”,是普通的ubuntu用户密码忘了,还是root密码忘了?服务器是物理机、虚拟机,还是云厂商的实例?每类情况的重置路径不完全一样。
实际运维中,我见过大量因为改动了/etc/shadow文件权限、误设了passwd命令限制、或者SSH密钥登录完全替代密码登录后,自己又把密钥弄丢的案例,行业共识认为,超过三成的Ubuntu服务器密码丢失,根源不是“记忆力衰退”,而是之前对认证配置的过度修改。
不管哪种场景,第一步永远是确认你能接触到什么:
- 如果服务器在你手边,直接用显示器键盘接上去,跟普通电脑一样操作
- 如果服务器在机房的远程管理卡(IPMI/iLO/iDRAC)里,用Web控制台也能获得同等的物理访问效果
- 如果是云服务器,简米云、酷番云、华为云的控制台都提供VNC登录,相当于给你一个远程显示器
先把这条链路打通,后面的重置步骤才有意义,否则你就算知道命令,也没地方敲。
最经典的方案:通过Grub进入单用户模式重置密码
这是Ubuntu服务器密码重置的“压箱底”操作,适用绝大多数物理机和虚拟机,整个过程不需要任何预装的救援工具,只要启动时能看到Grub菜单就行。
第一步:在Grub菜单里中断正常启动
服务器开机或重启时,当看到如下界面:
GNU GRUB 版本 2.06
马上按键盘方向的下箭头,选中默认内核那一行,然后按e进入编辑模式,注意,这个菜单停留时间默认只有几秒,手速慢了就进系统了,如果抓不住,可以重启再试,或者提前在/etc/default/grub里把GRUB_TIMEOUT调大。
第二步:修改内核启动参数
在编辑界面里,找到以linux开头的那一行,
linux /boot/vmlinuz-5.15.0-91-generic root=UUID=... ro quiet splash
用方向键定位到行尾,把ro改成rw,然后在末尾先加一个空格,再追加:
init=/bin/bash
注意,这里不要动root=UUID=...的部分,只改ro和追加参数,改完后的效果:
linux /boot/vmlinuz-5.15.0-91-generic root=UUID=... rw quiet splash init=/bin/bash
rw是让根文件系统以可读写方式挂载,init=/bin/bash则是让系统跳过所有服务,直接进入一个bash交互环境,这一步是关键,很多人改成init=/bin/sh,在部分系统上会遇到PATH不完整的问题,用/bin/bash更稳妥。
第三步:直接改密码
按Ctrl+X或F10启动,你会看到一个没有登录提示的bash界面,直接敲:
passwd ubuntu
或者如果你想重置root密码:
passwd root
系统会提示输入两次新密码,这里有个细节,输入密码时屏幕不会显示任何字符,别以为键盘没响应,正常打完回车就行,如果提示Authentication token manipulation error,往往是因为文件系统还是只读,你需要在bash里手动确认一下:
mount -o remount,rw /
再执行passwd命令。
改完后,输入exit或按Ctrl+D继续启动,进入系统后用新密码登录即可。
ubuntu重置root密码后重启就失效?问题出在别处
很多人按上面的步骤成功重置了密码,结果重启一次后又变回密码错误,或者直接报Authentication failure,别急着怀疑自己操作错了,常见原因有三个:
shadow文件权限被篡改
/etc/shadow文件权限应该是-rw-r-----,属主是root,如果之前有人执行过chmod 644 /etc/shadow,普通用户就能读,但root密码认证反而可能错乱,你可以在单用户模式下执行:
ls -l /etc/shadow
chmod 640 /etc/shadow
顺便看一眼passwd命令的权限:
ls -l /usr/bin/passwd
正常输出应该包含s位,比如-rwxr-sr-x,如果没有setuid位,普通用户就无法修改自己的密码。
启用了PAM的特殊认证规则
现代Ubuntu默认使用PAM模块,当你在Grub里用init=/bin/bash重置密码时,实际上绕过了PAM的密码策略检查,如果系统开启了pam_pwquality或pam_unix的remember选项,那么你设置的新密码可能不符合策略,但bash环境又允许你写入了,登录时PAM重新校验发现异常,就会拒绝认证。
这种情况下,建议在reset后立即检查:
cat /etc/pam.d/common-password
看一下有没有remember=5这样的参数,如果有,要么按策略要求设置密码,要么暂时注释掉相关行再重启。
忘记启用了sudo权限的用户
如果你重置的是普通用户密码,但该用户根本不在sudo组里,那你登录后也没法做管理操作,同样在单用户模式下执行:
usermod -aG sudo ubuntu
把目标用户加入sudo组,避免你一次次重复进入单用户模式。
物理控制台不可用?用Live CD挂载系统修改shadow文件
如果你的服务器是云主机,但没人给你Grub权限,或者VNC控制台连不上,那就需要靠云厂商的“救援模式”或者Live CD镜像了,这个方案的思路是:不启动你原来的系统,而是用一个临时系统去修改你的磁盘文件。
操作步骤
- 在云控制台找到“救援模式”或“挂载系统盘”,多数云平台都提供类似功能
- 将你的系统盘挂载到一个临时的救援实例上
- 挂载后,进入挂载点目录,比如
/mnt/ubuntu - 此时需要先处理一下
shadow文件,因为直接改可能被锁定
先看一下挂载点:
mount | grep /mnt
然后修改目标系统的shadow文件:
chroot /mnt/ubuntu passwd root
有些环境没有chroot,也可以直接编辑文件:
vi /mnt/ubuntu/etc/shadow
找到root:开头的那一行,把第一和第二个冒号之间的加密串删掉,变成:
root::19747:0:99999:7:::
这样root密码就变成了空密码,保存退出,然后卸载挂载,重启原服务器,注意,空密码登录后要第一时间设置新密码,否则任何人都能直接登录。
为什么不建议直接删掉后面所有内容?
不少人图省事,把/etc/shadow里root那一行整个删掉,结果系统直接拒绝root登录,正确做法是只清除密码哈希字段,保留其他时间参数,行业共识认为,修改认证文件时,越保守越好。
ubuntu服务器密码重置后,必须处理的三个收尾项
密码重置成功不代表结束,后面这几个动作不做,下次可能又进不去。
同步更新SSH密钥和登录方式
如果你的服务器之前开启了PasswordAuthentication no,那即使你重置了密码,SSH也照样拒绝密码登录,要在服务器上用新密码登录后,编辑:
vi /etc/ssh/sshd_config
确认其中包含:
PasswordAuthentication yes
PermitRootLogin yes
如果怕安全风险,也可以保留密钥登录,但至少把新的公钥加到
authorized_keys里,否则你明天就真的连不上了。
清理历史认证记录
重置密码后,最好看看有没有异常登录记录:
last -f /var/log/wtmp
grep "Failed password" /var/log/auth.log
如果发现在密码丢失期间有异常IP尝试登录,说明系统可能已经被盯上,顺手检查一下/etc/sudoers和crontab里有没有被人加料,这个过程不复杂,但值得花两分钟做一遍。
设置合理的密码策略和恢复手册
别再设成abc123这种密码了,Ubuntu中执行:
apt install libpam-pwquality
vim /etc/pam.d/common-password
设置最小长度和复杂度,
password requisite pam_pwquality.so retry=3 minlen=12
同时建议把重置流程写成一页纸的文档,放进你们的运维手册里,就算你有一天真的忘了,也不至于翻历史命令找半天。
常见问题解答(Q&A)
Q1: 酷番云ubuntu服务器密码忘了,能像物理机那样改Grub吗?
可以,但先别进Grub,酷番云控制台里先试“重置密码”功能,在实例详情页选择“更多”->“密码/密钥”->“重置密码”,只需提供手机验证和新的SSH密钥或密码,如果这个功能不可用(比如实例已关机或系统损坏),再使用“救援模式”挂载系统盘,步骤和我上面讲Live CD一致。
Q2: ubuntu服务器密码忘了无法进入系统,还能拿到里面的数据吗?
能拿到,用Live CD或云救援模式挂载磁盘后,即使不重置密码,你也可以直接浏览挂载目录下的文件,数据文件都在/mnt/.../home/和/mnt/.../var/www等位置,注意挂载时要用读写模式,只读挂载只能看不能改。
Q3: 重置密码后,原来运行的服务会受影响吗?
如果你通过单用户模式重置密码,整个过程没有启动任何服务,所以服务在下次正常启动时会照常运行,但如果你修改了/etc/shadow文件,而系统启动时正好有正读取该文件的服务(比如LDAP认证代理),极端情况下可能会短时认证出错,大多数情况下,重启一次所有服务重新初始化,影响基本为零。
最后再强调一遍:密码没了不可怕,可怕的是连进入系统的备用路径都没有,平时给root账号设一个强密码,再保留一个非root的sudo用户,或者至少在云平台开启密钥登录,以上所有重置操作的核心逻辑,无非是通过启动环境绕过认证或直接修改认证文件,下次再遇到类似问题,按这个思路走就不会慌。
首发原创文章,作者:王坚,如若转载,请注明出处:https://idctop.com/article/723082.html





