Linux服务器root密码忘记时,最快的方法是进入单用户模式或救援模式直接重置,或者使用系统安装盘进行修改,无需重装系统。
忘记密码前先理清思路
大多数情况下你登录不上服务器,不是密码真丢了,而是混淆了登录方式,Linux系统登录密码分几种:本地账户密码、SSH密钥登录密码、云平台VNC登录密码,还有sudo提权密码,很多人说”我密码忘了”,实际是密钥没配置好被拒之门外,或者VNC密码和系统密码搞混了。
先确认你面对的是哪种情况,再去动手,能少走不少弯路。
- 本地物理服务器,有显示器键盘:直接进单用户模式
- 云服务器,有控制台VNC/远程连接:用云平台的重置功能或救援模式
- 有SSH登录权限但没有root密码:用sudo或su切换
- 全部密码都丢了:必须通过物理访问或云平台后台介入
本地物理服务器重置root密码
物理机相对好处理,因为你接触得到硬件,重启机器,在grub引导菜单界面操作,不同系统版本步骤稍有差异。
CentOS 7/RHEL 7系列
重启后看到grub菜单,光标选中第一项内核,按字母 e 进入编辑模式,找到以 linux16 或 linux 开头的那一行,在末尾加上:
rd.break enforcing=0
按 Ctrl+X 或 F10 启动进入紧急模式,这个模式会挂载根文件系统为只读状态,先重新挂载为可写:
mount -o remount,rw /sysroot
chroot /sysroot
此时直接使用passwd命令设置新密码:
passwd root
输入两次新密码后,执行 touch /.autorelabel 让SELinux重新标记上下文,然后输入 exit 退出chroot,再输入 reboot 重启服务器,重启后root密码就是新设置的那个。
CentOS 8/RHEL 8及以上版本
新版grub编辑方式类似,但略有区别,同样按 e 进入编辑,在 linux 行末尾追加:
rd.break
后续步骤与CentOS 7相同,关键在于挂载、chroot、改密码三步,现代版本中,大多数情况下SELinux的重标记动作可以省略,系统会自动处理上下文,但执行
touch /.autorelabel 并不会造成副作用,保险起见还是建议加上。
Ubuntu/Debian系列
Ubuntu和Debian系统的恢复流程走的是 recovery mode,重启后按住 Shift 键进入grub菜单,选择 Advanced options for Ubuntu,然后选择带 recovery mode 字样的内核版本。
进入恢复菜单后,选择 root – Drop to root shell prompt,系统会挂载文件系统为只读,需要重新挂载成可写:
mount -o remount,rw /
然后直接修改密码:
passwd 你的用户名
如果用户目录被加密过,比如home目录使用了eCryptfs加密,单纯改密码还不够,需要先恢复密钥,不过这类情况在服务器场景中出现的频率较低,因为服务器通常不会对home目录做加密处理。
云服务器忘记密码后的操作路径
云服务器没法直接重启进单用户模式,因为grub菜单默认被隐藏,而且云平台有更便捷的方案。
云平台自带的密码重置功能
简米云、酷番云、华为云等主流平台的控制台都提供了 重置实例密码 功能,位置通常在实例详情页的”更多”或”密码/密钥”选项里,操作流程大致是:
- 登录云平台控制台
- 找到对应的云服务器实例
- 点击重置密码,输入新密码
- 确认后必须重启实例才能生效
这个功能只适用于重置系统root密码或管理员密码,不需要你记得任何旧密码,前提是你能登录云平台账号。
不同平台的入口稍不一样,但都会在实例操作菜单中提供,这个方案只影响密码,不会动数据和系统文件,安全性有保障。
救援模式(Rescue Mode)
如果云平台的重置功能不可用,或者你想保留旧密码文件做分析,救援模式是替代方案,多数云平台将救援模式设计为从另一个最小系统启动你的云服务器磁盘,需要你选择一个新的临时系统镜像。
启动救援模式后,将原系统盘挂载到一个临时目录:
mount /dev/vda1 /mnt
chroot /mnt
passwd root
修改完成后退出并重启,恢复正常系统,救援模式的原理与本地物理机的紧急模式完全相同,只是入口从本机grub挪到了云平台后台,有些平台可能只允许通过VNC连接救援系统,时间限制在数小时以内。
通过init参数直接突破
部分云服务器允许在grub界面追加 init=/bin/bash 参数,这种方法不用进入完整的单用户模式,而是直接以bash替换init进程启动系统。
这个方法要求你能访问grub编辑界面,云服务器上需要先在控制台开启grub菜单显示功能,或者通过串行控制台方式操作,步骤是:
- 找到
linux开头的那一行 - 在末尾追加
init=/bin/bash - 引导后直接进入bash提示符
- 此时根文件系统是只读的,执行
mount -o remount,rw /重新挂载 - passwd命令修改root密码
- reboot重启系统
这种方式比rd.break更直接,适合那些不熟悉SELinux和SELinux上下文机制的用户,要确认系统启用了initramfs,否则可能加载失败。
免密登录服务器后的密码修复
如果你保住了SSH密钥,这算是相对省心的情形,用密钥登录成功后,你可以直接修改密码:
sudo passwd root
这条命令会要求你输入两次新密码,不需要知道当前密码,即便你的sudo也需要密码,但没有密码也一样不行,因为sudo会要求当前用户密码,这种情况下,如果当前用户没有NOPASSWD权限,就只能用密码重置途径或恢复模式。
有时候密码没忘,是SSH服务本身对密码登录做了限制。/etc/ssh/sshd_config 文件中如果设置了 PasswordAuthentication no,你会不断看到密码错误提示,这时要确认是不是修改过这个文件,再用密钥登录后改回来。
密码修改后的收尾工作
成功改完密码,只是完成了第一步,以下几个细节不处理好,可能会再次把自己锁在外面:
- 检查sshd服务状态,确保SSH配置文件没有语法错误
- 用
ssh 用户名@服务器IP -p 端口号从新终端验证新密码 - 如果服务器上运行了web服务、数据库等应用,确认密码修改不影响它们的连接配置
- 线上业务需要维护,改密时注意业务连续性和应急回滚
建议使用SSH密钥登录代替密码登录,对远程服务器尤其如此,密钥登录能有效规避密码丢失和暴力破解的风险,日常操作配合sudo权限控制,比直接用root密码安全得多。
系统会自动同步新旧密码关联的shadow文件,所以手工修改通常不涉及数据库同步问题,但如果你使用LDAP或NIS统一认证,那需要到认证服务器上操作,这和单机修改是两条技术路径。
常见问题
云服务器忘记密码怎么办?
直接登录云平台控制台,在实例列表中找到目标服务器,点击重置密码,按提示设置新密码后重启实例,这种方式不依赖系统内部状态,本质上是云平台虚拟化层直接修改系统密码文件,适用于所有主流Linux发行版,云服务器已绑定密钥的情况下,也可以通过密钥登录后自行修改,不必走控制台重置。
grub菜单被隐藏了怎么进单用户模式?
开机出现grub界面时快速连按 Shift 或 Esc 键,多数Linux发行版默认隐藏了菜单,连按键能强制调出,如果按不出菜单,与键盘响应时间有关,还可以尝试修改grub配置文件中的超时时间,将GRUB_TIMEOUT调大并取消GRUB_HIDDEN_TIMEOUT,云服务器无法本地按键时,通过控制台的VNC或串行终端也能操作grub。
修改密码后其他用户受影响吗?
不受影响,passwd针对特定用户修改,root密码变了,普通用户密码和权限不会改变,各用户的数据文件也不受影响,但某些服务内部保存了root密码的连接串或配置文件,比如定时任务脚本、数据库备份脚本、ansible的inventory文件等,这类服务会因root密码变更而认证失败,需要同步更新这些配置中的密码信息。
首发原创文章,作者:王坚,如若转载,请注明出处:https://idctop.com/article/765979.html





