Linux服务器密码忘记了不用怕,核心解法是进入单用户模式或救援模式重置密码,这两种方式都不需要原密码,且操作成本极低。
密码忘记后的第一反应,先稳住别慌
很多朋友第一次遇到linux服务器密码忘记的时候,第一反应是重装系统,老实说,这个成本有点高,数据丢了不说,服务重新部署也要折腾半天,其实Linux系统设计上就留了后门给管理员,这个后门就是单用户模式和救援模式。
单用户模式相当于Windows的安全模式,系统启动时只加载最小化环境,直接给你一个root shell,救援模式则是从外部介质启动一个微型系统,然后挂载原有硬盘去修改密码,这两种方式都能解决linux服务器密码忘记了怎么办的问题,而且都能在几分钟内搞定。
linux服务器密码重置之前的准备工作
动手之前,有几件事必须确认清楚,不然可能白忙活一场。
- 确认是否需要物理接触服务器:如果是实体机,你需要接上显示器和键盘,如果是云服务器,操作方式略有不同,下文会单独说。
- 确认引导方式:现在的Linux发行版绝大多数使用GRUB2引导,操作方法基本一致。
- 确认磁盘加密状态:如果当初配置了LUKS全盘加密,那么重置密码前还需要输入磁盘加密密码,这个密码忘了就非常棘手。
- 确认内核参数入口:无论CentOS、Ubuntu还是Debian,重启进入GRUB菜单后按
e键都能编辑启动参数,这是最关键的一步。
linux服务器密码忘记后的常规套路:单用户模式实战操作
下面以最常见的场景为例子,一步步带你走一遍完整流程,这套方法适用于绝大多数主流发行版,包括CentOS 7/8、Rocky Linux、Ubuntu 18.04及以上版本。
重启服务器并进入GRUB编辑界面
重启服务器,在开机出现GRUB菜单时(通常是一个黑屏白字的列表),迅速按下键盘上的 e 键进入编辑模式,如果机器启动太快没来得及按到,就再重启一次。
修改内核启动参数
在编辑界面中,找到以 linux 或 linux16 开头的那一行(通常是倒数第二行),这行末尾通常会包含类似 ro 的参数,表示只读挂载根文件系统。
用方向键移动光标到这一行的末尾,把 ro 改成 rw,然后空格加上 init=/bin/bash 或者 rd.break,两种方式选择其一即可,追加完成后,按 Ctrl+X 或 F10 启动系统,就能获得一个可读写的root shell环境。
重置root密码
-
如果使用了
rd.break,系统会进入一个类似switch_root:/#的提示符,此时需要执行:mount -o remount,rw /sysroot chroot /sysroot passwd root输入两次新密码后,执行
touch /.autorelabel(仅SELinux开启时需要),exit再reboot。 -
如果使用了
init=/bin/bash,系统会直接进入一个root shell,此时根文件系统已经是可读写状态,直接执行:passwd root输入两次新密码后,执行
exec /sbin/init或reboot -f重启。
场景区分:CentOS系和Ubuntu系的细微差别
虽然整体步骤一致,但不同发行版在处理linux服务器密码重置时有一些细微差别,这里列个表格对比一下。
| 发行版 | 启动参数修改处 | 重置后额外步骤 | 备注 |
|---|---|---|---|
| CentOS 7/RHEL 7 | 以 linux16 开头的行 |
无特殊操作 | SELinux可能需要relabel |
| CentOS 8/RHEL 8+ | 以 linux 开头的行 |
同上 | 参数改成 init=/bin/bash 有时不生效,优先用 rd.break |
| Ubuntu 18.04+ | 以 linux 开头的行 |
需要先 mount -o remount,rw / 再修改密码 |
救援模式操作路径不同 |
无法进入本机操作时,试试云服务器的救援模式
如果你管理的是云服务器,通常没有实体机箱可以重启接键盘操作,好在主流云厂商都提供了VNC登录和救援模式功能,用来看linux服务器密码忘记后的恢复操作。
云服务器密码找回与普通服务器的区别
云服务器通常无法直接获取启动时的GRUB界面,但可以借助厂商提供的控制台功能来间接实现:
- 使用VNC远程连接:大多数云平台(简米云、酷番云、华为云等)的控制面板均提供VNC登录入口,通过VNC连接后,你就能看到服务器启动画面,这时候重启实例,并按
e键进入GRUB编辑界面,操作步骤与本地操作完全一致。 - 使用救援模式:如果VNC连接不稳定或者无法进入GRUB,部分厂商提供救援模式功能,原理是挂载系统盘到一台临时救援实例上,在救援实例中修改原系统盘的密码配置文件。
云服务器重置密码的实际操作路径
以常见的VNC方式为例,流程如下:
- 登录云厂商控制台,找到目标实例,点击“远程连接”或“VNC登录”。
- 在VNC窗口中,选择重启实例,并迅速点击窗口内区域捕获键盘焦点。
- 出现GRUB菜单时按
e,后续步骤参考上文单用户模式的操作方法。
如果不幸连GRUB菜单都进不去,或者按 e 没有反应,那就改用厂商提供的救援模式挂载硬盘,在救援实例中直接修改 /etc/shadow 文件,删除root密码哈希(使密码为空),然后重启原实例,使用空密码登录后再设新密码。
云服务器linux密码找回需要额外花钱吗
关于费用问题,行业内并没有统一标准。大多数云厂商的基础救援功能和VNC登录是免费提供的,但个别厂商可能会对“批量重置密码”或“专业救援服务”收费,具体需要咨询你所使用的云服务商客服,如果是自建机房物理服务器,找IDC运维帮忙处理可能产生一定的服务费,这部分价格因地区和服务商而异,建议提前问清楚。
linux服务器密码重置后的防护与日常管理建议
密码重置成功只是第一步,后续的整理和防护更关键,很多做过linux服务器密码重置的朋友总结出一个经验:一次性解决问题,而不是反复救火密码刚改完,趁热打铁把后续安全配置落实,避免复发。
设置免密登录,以后不再依赖密码
用SSH密钥登录代替密码登录,可以让你下次忘记密码时依然能轻松进入服务器,这是最实用的技巧。
- 在本地电脑生成密钥对,执行
ssh-keygen -t rsa -b 4096。 - 将公钥复制到服务器,执行
ssh-copy-id root@你的服务器IP。 - 修改服务器SSH配置文件
/etc/ssh/sshd_config,将PasswordAuthentication设为no。 - 重启SSH服务,执行
systemctl restart sshd。
为了增强安全性,建议将root用户的SSH登录限制为仅允许内网IP,或结合fail2ban工具自动封锁多次尝试登录的IP地址,把爆破风险挡在门外。
设定合理的密码策略和定期更新机制
行业共识认为,服务器密码至少应包含12位以上的随机字符,混合大小写字母、数字和特殊符号,同时建议每90天左右更换一次密码,这些工作可以通过 chage 命令或系统自带的PAM模块自动强制执行,如果管理多台服务器,可以使用密码管理工具存储凭据,比如常见的开源工具,能避免因密码过多而遗忘的窘境。
忘记密码之后的经验复盘:备份与自动化意味着什么
忘密码本质上是管理流程缺失的表现,建议给自己的服务器做一个简单的“应急文档”,包含以下基本信息:
- 服务器的IP地址、登录用户名、登录端口(默认22),如果修改了端口务必记录。
- 上一次成功登录日期以及密码变更时间。
- 是否启用了LUKS磁盘加密,密码是什么。
- 云平台控制台的登录地址和账户信息。
另外一个建议是,在计划内运维时,提前创建一台备用跳板机并配置好免密登录,一旦出现突发情况,可直接通过跳板机准入,不必依赖密码本身。
Q&A:linux服务器密码忘记的常见疑问
服务器被人修改了root密码,重启进单用户模式能否保证找回控制权
单用户模式获取root权限的前提是攻击者没有修改GRUB引导密码,如果GRUB本身设置了密码保护,则按 e 时需要先输入GRUB密码才能编辑启动参数,这种情况下,建议联系机房或云厂商提交工单,通过硬件控制台或带外管理(如IPMI、iDRAC)介入处理。
修改密码后,其他用户或服务的密钥证书会失效吗
不会,passwd 仅影响登录认证环节,不影响已生成的SSH密钥、SSL证书以及服务配置文件,唯一需要注意的是,如果之前配置了基于密码的计划任务(如rsync、备份脚本),这些脚本中的密码需要同步更新。
单用户模式重置密码会影响服务器已有数据吗
不会,重置密码只修改 /etc/shadow 文件中的密码哈希,不涉及业务数据分区,但如果操作过程中误执行了 init=/bin/bash 却未正确挂载文件系统,则以只读方式启动不会造成数据损坏,这比盲目重装系统要安全得多,需要留意的是,一旦在shell中执行了部分系统维护命令,如 fsck 或错误的挂载操作,可能影响系统完整性,所以非必要不乱执行命令。
首发原创文章,作者:王坚,如若转载,请注明出处:https://idctop.com/article/793541.html


