在 Ubuntu 系统中,如果忘记了 root 密码或者需要重新启用 root 账号,可以通过 恢复模式(Recovery Mode) 或 Grub 启动参数 来重置密码,而无需重装系统。
前提条件:
你需要有 物理机/虚拟机控制台 权限(如 VMware/KVM 控制台、iDRAC、iLO、云平台 VNC 等)。对于公有云(阿里云、腾讯云、AWS 等),一般推荐优先使用云厂商自带的密码重置/救援模式。
下面以常见的 Ubuntu 16.04 / 18.04 / 20.04 / 22.04 为例说明操作方法。
一、确认 Ubuntu 的 root 使用方式
Ubuntu 默认是 不直接启用 root 登录 的,一般做法是:
- 使用普通用户,通过 sudo 提升权限;
- 默认 root 是有密码的,但不推荐直接用 root 登陆。
你可能遇到的几种情况:
- 忘记了能 sudo 的普通用户密码;
- 忘记 root 密码,但希望重新启用 root 登录;
- 只有一个账号,但密码不记得了。
下面的方法都可以用来在系统层面直接修改 /etc/shadow 中的密码,从而重置 root 或某个用户的密码。
二、方法一:通过 Recovery Mode 重置 root 密码(推荐)
这是最常用、最安全的一种方式,适合大多数 Ubuntu 安装。
1. 重启系统,进入 Grub 菜单
- 重启服务器:
- <BASH>
- reboot
- 如果本身进不了系统,可以在控制台上直接点击“重启”。
- 在系统刚启动时,当屏幕上出现开机 LOGO 或闪黑屏的时候,立刻按住或反复按:
- BIOS 机型:Shift
- UEFI 机型:Esc
- 直到出现 Grub 菜单,能看到类似:
- <TEXT>
- Ubuntu Advanced options for Ubuntu
如果 Ubuntu 是唯一系统且平时不显示 Grub 菜单,这一步尤其重大。
2. 进入高级选项 / 恢复模式
- 在 Grub 菜单中,用方向键选择:
- <TEXT>
- Advanced options for Ubuntu
- 然后按 Enter。
- 在“高级选项”菜单中,选择一项带有 (recovery mode) 字样的内核启动项,列如:
- <TEXT>
- Ubuntu, with Linux 5.4.0-xx-generic (recovery mode)
- 然后按 Enter。
系统会以恢复模式启动,最终进入一个带菜单的“恢复界面”。
3. 选择 root 模式(root shell)
等待恢复模式加载完毕后,会看到一个文本菜单,选项类似:
<TEXT>
resume Resume normal boot
clean Try to make free space
dpkg Repair broken packages
fsck Check all file systems
root Drop to root shell prompt
- 选择:
- <TEXT>
- root Drop to root shell prompt
- 输入回车。
- 这时会进入一个 root shell,提示类似:
- <TEXT>
- root@hostname:~#
注意:此时根文件系统一般是 只读挂载 的,需要改成读写才能修改密码。
4. 将根文件系统 remount 为读写
在 root shell 中执行:
<BASH>
mount -o remount,rw /
无需任何输出即表明成功。
你可以用 mount | grep ' / ' 检查当前挂载状态。
5. 重置 root 密码或普通用户密码
5.1 重置 root 密码(启用/修改 root)
直接执行:
<BASH>
passwd root
按提示输入新密码两次,例如:
<TEXT>
Enter new UNIX password:
Retype new UNIX password:
passwd: password updated successfully
看到 updated successfully 就说明 root 密码已修改完成。
5.2 重置普通用户密码
假设你的普通用户是 ubuntu 或 admin,执行:
<BASH>
passwd ubuntu
# 或
passwd admin
操作流程和修改 root 密码一样,输入新密码两次即可。
6. 退出并继续正常启动
密码更改完成后:
- 输入:
- <BASH>
- exit
- 返回到 recovery 菜单。
- 在菜单中选择:
- <TEXT>
- resume Resume normal boot
- 回车,让系统继续正常启动。
系统启动完成后,你可以直接用新密码登录:
- 如果是普通用户:用新密码登录,再使用 sudo。
- 如果要直接用 root:先允许 root 登录(见后文设置)。
三、方法二:通过修改 Grub 启动参数重置密码(适用于无 Recovery Mode)
在部分最小化安装或特殊环境下,可能没有 recovery mode 选项,这时可以通过 Grub 临时改启动参数,进入单用户/救援模式重置密码。
1. 进入 Grub 菜单并编辑启动项
重启系统,按 Shift 或 Esc 进入 Grub 菜单,选中默认的 Ubuntu 启动项,按下:
<TEXT>
e
进入编辑模式。
2. 修改内核启动参数
在编辑页面中:
- 找到以 linux 开头的那一行,一般类似:
- <TEXT>
- linux /boot/vmlinuz-5.4.0-xx-generic root=UUID=xxx ro quiet splash $vt_handoff
- 把其中的 ro 改为 rw(可选,但提议):
- <TEXT>
- … root=UUID=xxx rw quiet splash …
- 在这一行的 末尾 加上:
- <TEXT>
- init=/bin/bash
最终类似这样:
<TEXT>
linux /boot/vmlinuz-5.4.0-xx-generic root=UUID=xxx rw init=/bin/bash
3. 启动到 bash 环境
按:
<TEXT>
Ctrl + X
或 F10,使用当前参数启动。
如果成功,将会直接进入一个 bash shell,提示类似:
<TEXT>
root@(none):/#
此时系统还未完全启动,只是跑了一个 root shell。
4. 将根文件系统挂载为读写
执行:
<BASH>
mount -o remount,rw /
让根文件系统可写。
5. 重置 root 密码或普通用户密码
步骤与前面一致:
- 重置 root:
- <BASH>
- passwd root
- 重置用户:
- <BASH>
- passwd ubuntu
按提示输入两次新密码,看到 password updated successfully 即完成。
6. 同步数据并重启
重启前执行一次同步:
<BASH>
sync
reboot -f
系统会重新启动,并回到正常启动流程。
随后你就可以使用新密码登录系统。
四、启用 root 远程登录(如有需要)
在 Ubuntu 中,即使你设置了 root 密码,默认情况下 SSH 是禁止 root 密码登录 的。
如果你的确 有运维需求希望允许 root 远程登录(必须超级注意安全!),可以这样做:
- 编辑 SSH 配置:
- <BASH>
- sudo vi /etc/ssh/sshd_config
- 找到(或新增)如下配置:
- <TEXT>
- PermitRootLogin yes PasswordAuthentication yes
- 保存退出后重启 SSH:
- <BASH>
- sudo systemctl restart ssh
这样就可以使用 root 账号和新密码通过 SSH 登录了。
但从安全角度强烈提议:
- 优先使用普通用户 + sudo;
- 尽量改用 SSH 公钥认证,禁用密码登录:
- <TEXT>
- PasswordAuthentication no
五、常见问题与排查
1. 启动时看不到 Grub 菜单?
可能缘由:
- 机器太快,Grub 菜单瞬间跳过;
- Ubuntu 是单系统安装,Grub 默认隐藏。
解决办法:
- 重启时在 BIOS/UEFI 自检过后,重复按 Shift(BIOS)或 按住 Esc(UEFI),直到菜单出现;
- 某些云平台会提供“进入救援模式”或“VNC 控制台”,可以利用这些方式进入 Grub。
2. 修改 Grub 后启动依然进入正常系统,没有 bash 或 root shell?
请检查:
- 是否的确 修改了以 linux 开头的那一行;
- init=/bin/bash 是否写在这一行的末尾;
- Ctrl + X 或 F10 是否被正确按下用于“以当前参数启动”。
如有问题,重启后重新尝试。
3. 重置密码后依旧登录失败?
常见缘由:
- 键盘布局不一致(特别是特殊符号),导致输入密码时实际内容不同;
- 登录的是错误的用户;
- SSH 禁止密码登录,导致即便密码正确也无法登录。
排查提议:
- 在本地控制台尝试登录;
- 使用一个简单但临时的密码测试(列如仅字母数字);
- 检查 /etc/ssh/sshd_config 中是否关闭了密码登录。















暂无评论内容