root 密码永远无法被「找回」:它不会以明文形式存储,即使在我们这里也是如此。它只能被替换。下面的所有方法都基于同一个思路:临时获得对机器的特权访问,然后执行 passwd。
这些方法按从简单到复杂的顺序排列。请按顺序尝试。
如何在客户中心重置丢失的 root 密码?
这是常规方式,且无需事先访问机器。
- 在客户中心打开您的服务。
- 在 访问与安全选项卡中输入新密码并确认。
- 重启机器。
在 KVM VPS 上,重启并非可选项:新密码会被写入 VM 的初始化配置,并且只在下次启动时读取。如果不重启,什么都不会改变。
此方法可以解决绝大多数情况。只有在重启后新密码仍被拒绝时,才需要使用下一种方法;这种情况会出现在安装后初始化配置被禁用或移除的机器上。
如何通过 GRUB 和救援控制台重置 root 密码?
服务的 控制台 选项卡会打开机器的屏幕,就像您带着键盘坐在机器前一样。当 SSH 无法使用时,这是唯一仍然有效的访问方式。
原理:在启动时,让内核启动一个 shell 来代替完整的系统。这样无需身份验证即可获得 root 访问权限,用于更改密码。
第 1 步:显示 GRUB 菜单
打开 控制台,然后从客户中心重启机器,并保持控制台可见。在启动的最初阶段,按住 Shift 或多次按 Esc,以调出 GRUB 菜单。
这是最棘手的环节:时间窗口很短。不妨多试几次。
第 2 步:修改启动行
在菜单中:
- 选择常用的 Linux 启动项;
- 按
e进行编辑; - 找到以
linux、linux16或linuxefi开头的那一行; - 在该行的末尾添加:
rw init=/bin/bash
如果该行中已包含 ro,请将其替换为 rw。
按 Ctrl + X(或 F10)启动。
此修改是临时的:它不会被保存,下次重启后即会失效。
第 3 步:确认根分区可写
您会看到一个命令提示符。请检查:
mount | grep " on / "
如果看到 ro,请以可写方式重新挂载根分区:
mount -o remount,rw /
如果跳过此步骤,passwd 将会失败:在只读系统上无法修改密码文件。
第 4 步:更改密码
passwd root
输入并确认。在 Ubuntu 上,root 账户通常默认处于锁定状态:请改为重置您的管理员用户的密码。
passwd username
第 5 步:正常重启
由于系统并非正常启动,常用命令可能没有响应。请先尝试:
sync
exec /sbin/init
如果机器没有重新启动:
sync
reboot -f
sync 并非可有可无:它会强制将仍在内存中的修改写入磁盘。如果没有它,密码更改可能会在重启时丢失。
在 Rocky、AlmaLinux、Fedora 或 RHEL 上该如何操作?
在这些发行版上,推荐的方法是使用 rd.break 而不是 init=/bin/bash。在 GRUB 中,在内核行的末尾添加:
rd.break
然后,在获得的 shell 中执行:
mount -o remount,rw /sysroot
chroot /sysroot
passwd root
touch /.autorelabel
exit
reboot
/.autorelabel 文件会要求 SELinux 在下次启动时重新计算安全标签。如果没有它,即使密码正确,系统也可能拒绝登录。这次启动会比平时更久,这是正常现象。
如果重置失败怎么办?
首先确定确切的症状:以下每种情况都有明确的原因和已知的解决方法。
passwd: Authentication token manipulation error
根分区以只读方式挂载。请重新执行:
mount -o remount,rw /
密码正确,但 SSH 拒绝 root 登录
问题不在密码:SSH 配置禁止 root 直接登录。请在控制台中检查:
grep -E "^PermitRootLogin|^PasswordAuthentication" /etc/ssh/sshd_config
请改用具有 sudo 权限的用户登录。这本身也是更推荐的配置。
GRUB 菜单始终不出现
某些镜像启动速度太快,键盘来不及介入。这种情况下,请提交工单:我们可以对机器进行干预。客户中心不提供挂载外部救援镜像的功能。
您更希望从零开始
如果机器上还没有数据,使用 重新安装选项卡比任何启动操作都更快、更安全。它会清空磁盘,并使用您选择的密码重新安装系统。
恢复访问后应检查什么?
丢失密码是一个检查是否有其他人进入过系统的好时机。
find /root /home -name authorized_keys -type f -print
last -a
第一条命令会列出已授权的 SSH 密钥:任何您不认识的密钥都应删除。第二条命令会显示最近的登录记录。
然后更新系统,并改用 SSH 密钥认证,从此不再依赖密码。