Linux服务器密码忘记后不需要重装系统,通过单用户模式或救援模式即可重置root密码,整个过程约5到10分钟。下面按主流系统版本和操作场景,把完整步骤和注意事项拆开讲清楚,照着做就能把控制权拿回来。
linux服务器密码忘记了怎么办:先把思路理明白
忘记密码这件事,大多数情况下发生在两种场景:一是长时间没登录过这台机器,二是接手了前任运维留下的服务器,交接文档里没写密码,不管哪一种,核心思路是一致的:绕过登录验证,直接进入一个拥有root权限的临时环境,然后重新设置密码。
这个思路能不能走通,取决于你能否接触到服务器的物理终端或远程管理卡(如IPMI、iDRAC、BMC),如果你用的是云服务器,那么云厂商控制台提供的VNC登录功能就是你的”物理终端”,这个务必要确认开通了,没有控制台权限,下面的办法都无从谈起。
重置Linux密码的两种主流入口
通过grub引导菜单进入单用户模式
单用户模式是Linux系统自带的最小运行环境,只挂载根文件系统,不启动任何服务,直接给你一个root shell,这是最常用、最稳妥的方式,适用于CentOS 6、7,RHEL系列,以及部分Debian版本。
操作步骤如下:
- 重启服务器,在GRUB引导界面出现时,快速按下键盘上的
e键进入编辑模式。 - 找到以
linux16或linux开头的那一行(不同版本内核字段名略有差异),在这一行的末尾追加一个参数:rd.break或者直接写single。 - CentOS 7及更新版本推荐使用
rd.break,它会让你进入一个临时的initramfs环境,根目录以只读方式挂载在/sysroot下。 - 按
Ctrl+X或F10启动,系统会停在switch_root:/#提示符下。 - 依次执行下面的命令,把根目录重新挂载为可写状态:
mount -o remount,rw /sysroot chroot /sysroot passwd root touch /.autorelabel exit reboot
这里有一个关键点:touch /.autorelabel 只针对启用了SELinux的系统,目的是让系统重启时自动重新标记文件安全上下文,否则你改了密码也可能会遇到SELinux拒绝访问的问题,如果你的服务器确认关闭了SELinux,这一步可跳过。
使用系统的rescue救援模式
救援模式比单用户模式更进一步,它会在一个完整的小型Linux环境中运行,适合根文件系统损坏或者单用户模式进不去的场景,以RHEL/CentOS安装光盘或U盘为例:
- 用系统安装介质启动服务器,在启动界面选择
Troubleshooting。 - 接着选择
Rescue a CentOS system。 - 系统检测到现有安装后,会询问是否挂载到
/mnt/sysimage,选择1继续。 - 获得shell提示符后,执行:
chroot /mnt/sysimage passwd root exit reboot
这个方法对Ubuntu同样适用,只是Ubuntu的救援模式入口叫 Ubuntu Rescue mode,流程几乎一样。
不同Linux发行版的具体操作差异
CentOS 7与RHEL 7重置密码细节
CentOS 7是生产环境中的常客,它的重置步骤有一点特殊,进入grub编辑界面后,不仅要追加 rd.break,还需要把 ro 改为 rw,这样后续才不用手动执行mount命令,修改后的那一行看起来像这样:
linux16 /vmlinuz-... root=/dev/mapper/centos-root ro crashkernel=auto ... rd.break
把它改成:
linux16 /vmlinuz-... root=/dev/mapper/centos-root rw crashkernel=auto ... rd.break
启动后直接就是可写的root环境,省去了重新挂载的步骤,这个细节常被忽略,但直接影响操作顺不顺。
Ubuntu 20.04及以上版本绕过密码的方法
Ubuntu新版使用GRUB 2,重置思路相同,但步骤略有调整:
- 启动时按住
Shift键呼出GRUB菜单(UEFI模式则可能需要按Esc)。 - 选择
Advanced options for Ubuntu,再选择带(recovery mode)字样的内核。 - 在Recovery菜单里,选择
root - Drop to root shell prompt。 - 此时根文件系统是只读的,执行
mount -o remount,rw /重新挂载。 - 运行
passwd 用户名输入两次新密码,reboot。
Ubuntu Server 18.04及之前的版本,如果GRUB密码没有被单独设置,还有一种更直接的办法:在grub启动项编辑界面,把 ro quiet splash 改成 rw init=/bin/bash,直接以bash作为init进程启动,同样能拿到root shell。
云服务器忘记密码的高效处理路径
如果你用的是简米云、酷番云、华为云这类国内云厂商的服务器,事情就更简单了。几乎所有主流云厂商都提供了”重置实例密码”的功能。
以简米云为例,路径是:控制台 → ECS实例列表 → 选中目标实例 → 更多 → 密码/密钥 → 重置实例密码,输入新密码后,需要重启实例才能生效。
这个方式的好处是完全不依赖系统本身的状态哪怕系统已经崩溃、无法引导,云厂商通过底层虚拟化层也能直接改密码,需要付出的代价是必须重启服务器,这会导致业务短暂中断,如果业务不能停机,建议结合业务低峰期操作,或者先使用VNC登录方式尝试单用户模式。
酷番云和华为云的操作也类似,基本都在实例详情页的”安全”或”登录”相关菜单下,国内云厂商的VNC登录入口通常也在实例详情页,遇到救援模式操作不顺利时,VNC是你排查问题的最直观通道。
重置密码后的必做事项
这部分经常有人忽略,但踩坑的人不少,密码改完,reboot之后你以为一切正常,结果可能遇到登录不了的新问题。
SELinux上下文检查
前面提到的 touch /.autorelabel 不是玄学,SELinux启用状态下,你修改 /etc/shadow 文件会改变该文件的安全上下文,导致下次系统启动后SSH登录失败或者密码验证不通过,执行 getenforce 可以查看当前SELinux状态,如果输出是 Enforcing,务必执行autorelabel这一步。
SSH服务状态确认
密码改完后,理论上SSH应该能正常登录,但如果之前SSH服务配置了不允许root远程登录(PermitRootLogin no),那不管密码改多少次也登不上,这种情况下需要通过VNC或控制台确认 /etc/ssh/sshd_config 的配置,必要时改成 PermitRootLogin yes 并重启sshd服务。
密码策略与安全设置
服务器密码不像个人电脑,设置成”Password123″这种级别很不安全,行业共识认为,root密码至少应包含大小写字母、数字和特殊字符,长度不低于12位,同时建议检查一下系统里是否还有其他活跃用户账号,一并将密码重置,避免出现多个弱口令入口。
对于简米云这类云服务器,修改密码后云厂商的安全组规则可能会拦截频繁的SSH尝试,如果出现登录不上,先检查安全组和网络ACL是否放行了22端口。
Linux密码保护的最佳实践
重置密码是亡羊补牢,好的习惯才是避免再次陷入”linux服务器密码忘记了怎么办”困境的关键。
- 启用SSH密钥登录,密钥登录天然免疫密码遗忘问题,私钥在自己手里,比任何密码都可靠,生成方法很简单:
ssh-keygen -t rsa -b 4096,然后把公钥追加到服务器的~/.ssh/authorized_keys中。 - 使用密码管理工具,KeePass、Bitwarden、LastPass等工具都能安全存储服务器凭证,避免密码只存在于某一个人的脑子里。
- 设置sudo独立密码,很多团队喜欢所有人共用root,这其实是隐患,给每个运维人员分配独立账号,通过sudo提权,出现问题时可以溯源到具体个人。
- 定期检查登录日志。
last -n 20和journalctl -u sshd是查看异常登录的快捷方式,发现异常IP赶紧处理。
常见问题快速解答
修改linux服务器密码后ssh连不上是什么原因
大概率是SELinux上下文问题或sshd配置限制了root登录,先通过云控制台VNC登录服务器,执行 getenforce 查看SELinux状态,如果是 Enforcing,执行 restorecon -v /etc/shadow 修复上下文,接着检查 /etc/ssh/sshd_config 中的 PermitRootLogin 项,确认不为 no,然后重启sshd服务即可。
单用户模式进入后没有passwd命令怎么办
passwd 命令缺失的情况很少见,多发生在上一步 chroot 没有执行成功时,确认你已经正确执行了 chroot /sysroot 或者 chroot /mnt/sysimage,如果chroot后依然找不到命令,说明系统的base包有损坏,可以尝试用安装光盘的救援模式修复,或者利用云厂商的镜像回滚功能恢复到之前的正常快照。
grub密码也忘记了还能重置吗
可以,GRUB引导密码独立于系统密码,但如果GRUB密码也忘了,直接从本机操作就比较困难了,云服务器可以联系服务商的技术支持,通过底层管理通道帮你解锁引导配置;物理服务器通常需要主板上清除CMOS来重置BIOS/GRUB设置,重置后再按常规步骤修改系统密码即可。
首发原创文章,作者:王坚,如若转载,请注明出处:https://idctop.com/article/783671.html


