Linux服务器密码忘了,最稳妥的思路是进单用户模式或救援模式,直接把 /etc/shadow 里的密码字段清掉或用 passwd 重设,重启后就能用新密码登录。前提是你得有物理控制台或云平台提供的 VNC 入口,否则一切白搭。
先判断你手头有什么牌
遇到密码丢失,别急着搜命令,先确认三件事:服务器是物理机还是云主机、有没有控制台权限、系统盘是否加密,这三条决定了你能走哪条路。
- 物理机/带IPMI的机器:能进BIOS、能挂载ISO、能改GRUB,操作空间最大。
- 云服务器(简米云/酷番云/华为云等):只能用厂商控制台的VNC或救援模式,且部分厂商支持“重置密码”功能直接下发。
- 系统盘做了LUKS加密:需要先解密才能碰引导,流程多一步,下面会单独说。
业内专家指出,相当一部分密码丢失事故发生在物理机机房搬迁或交接文档缺失之后,而非真正的遗忘,所以先翻翻运维交接记录,往往比折腾引导更省时间。
通用套路:GRUB单用户模式改密码
这是最经典、适用面最广的方法,CentOS、RHEL、Ubuntu、Debian 基本都能走通,核心逻辑是:在引导阶段打断启动流程,让内核以单用户身份进入系统,此时不校验root密码,直接改。
第一步:重启并在GRUB菜单停下
重启服务器,在出现GRUB菜单时按方向键停住倒计时,如果菜单一闪而过,开机时连按 Esc 或 Shift 试试,停住后选中要启动的内核条目,按 e 进入编辑。
第二步:改内核启动参数
找到以 linux 或 linux16 开头的那一行,在行尾追加参数:
- CentOS/RHEL 7 及以上:
rd.break(推荐,后面单独讲) - Ubuntu/Debian 及老版本CentOS:
rw init=/bin/bash或single
追加后按 Ctrl+X 启动。
第三步:挂载根分区并改密码
如果用的是 init=/bin/bash 方式,进入后根分区可能是只读的,先执行:
mount -o remount,rw / passwd root
输入两次新密码,如果提示密码太短或有字典特征,系统会警告但多数情况下仍可强制生效,加 --force 可跳过弱密码检查:
passwd --force root
改完执行 exec /sbin/init 或直接 reboot -f 重启。注意:SELinux开启的机器,改完 /etc/shadow 后需要重建上下文,否则可能登录失败:
touch /.autorelabel
再重启,让系统自动重打标签。
CentOS 7/8 忘记root密码进单用户模式的关键差异
从RHEL 7开始,官方推荐用 rd.break 而不是 init=/bin/bash,操作路径是:GRUB编辑界面在 linux 行尾加 rd.break,Ctrl+X 启动后进入 switch_root 的紧急shell,此时真正的根分区挂在 /sysroot,需要:
mount -o remount,rw /sysroot chroot /sysroot passwd root touch /.autorelabel exit reboot
chroot 这一步不能省,否则改的是内存里的临时根,重启就白干,这套流程在CentOS 8、Rocky Linux、AlmaLinux 上同样适用,只是GRUB界面略有不同。
云服务器Linux系统密码忘了怎么办
云主机的麻烦在于你摸不到物理机,但好处是厂商通常留了后门,以主流云平台为例,路径大同小异:
- 登录云控制台,找到目标实例,点“远程连接”或“VNC登录”。
- 如果VNC能进GRUB,就按上面的单用户模式走。
- 如果VNC直接进了系统登录界面但密码不对,看控制台有没有“重置密码”按钮部分厂商允许在关机状态下直接重置,重启即生效。
- 实在不行,用“救援模式”:把系统盘挂到一台临时实例上,改完
/etc/shadow再挂回去。
这里有个坑:云主机的GRUB倒计时可能被设置为0,VNC连上去根本看不到菜单,此时需要在控制台强制重启,并在实例启动的瞬间反复按 Esc,或者通过云平台提供的“发送Ctrl+Alt+Del”和“发送特殊按键”功能抢时机,抢不到就只能走救援模式。
近年来主流云厂商对“重置密码”功能普遍做了权限收敛,子账号可能没有这个按钮,需要主账号或具备对应RAM权限的账号操作,这一点在排障时容易被忽略。
改完密码别忘了这几件事
密码改回来只是第一步,真正的运维动作在后面:
- 检查SSH配置:确认
PermitRootLogin是否被改成no,如果禁了root登录,改完密码也连不上,需要用普通用户登录后su或改配置。 - 确认SELinux和防火墙没被单用户模式搞乱:
/.autorelabel触发的那次重启会比较慢,别以为机器挂了。 - 记录变更:在CMDB或运维日志里写清楚哪台机器、什么时间、因为什么原因重置了密码,避免下次交接再踩坑。
- 顺手换成密钥登录:行业共识认为,root密码登录的风险远高于SSH密钥,重置完密码后配置
authorized_keys并关闭密码认证,是更省心的长期方案。
LUKS加密盘的特殊处理
如果系统盘做了全盘加密,GRUB阶段会先要求输入LUKS口令,输不对连内核都加载不了,单用户模式自然无从谈起,这种情况只有两条路:一是LUKS口令没丢,正常解密后进系统再改root密码;二是LUKS口令也丢了,那基本只能重装或用备份恢复加密盘的设计初衷就是防物理接触,没有后门可走,所以做加密部署时,LUKS口令必须单独归档,别和root密码放同一个保险柜。
Q&A:Linux密码重置高频疑问
Q:Linux修改密码命令除了passwd还有别的吗?
有。passwd 是交互式改密,适合人工操作;批量或脚本场景常用 echo "新密码" | passwd --stdin username,但该参数在部分发行版(如Debian系)的passwd实现中不支持,需要改用 chpasswd:
echo "username:新密码" | chpasswd
更底层的方式是直接用 openssl passwd -6 生成SHA-512哈希,手工写入 /etc/shadow 对应字段,但容易因字段格式错误导致用户无法登录,非必要不建议。
Q:服务器密码忘了但SSH密钥还能用,还需要进单用户模式吗?
不需要,只要还有一把能登录的密钥或一个能 sudo 的普通账号,直接登录后 sudo passwd root 即可,全程不用重启,这也是为什么建议每台机器至少保留两个可用登录凭证密钥加一个应急账号,比事后折腾GRUB省事得多。
Q:Linux忘记root密码重置后,原来的定时任务和服务会受影响吗?
不会,密码重置只改 /etc/shadow 中的哈希字段,不触碰用户家目录、cron、systemd单元或文件属主,唯一需要注意的是:如果有服务用root密码做数据库或API认证,那些配置里的密码需要同步更新,否则服务会在下次认证时失败,改完密码后建议跑一遍 systemctl --failed 和关键业务日志,确认没有认证类报错,再收工。
首发原创文章,作者:王坚,如若转载,请注明出处:https://idctop.com/article/789578.html


