修改Linux服务器登录密码忘记了怎么办?答案是:不用重装系统,进入GRUB菜单,通过单用户模式或救援模式获得root shell,然后执行passwd命令重置密码。 下面按发行版和场景给出具体操作路径。
linux服务器密码忘记了怎么找回?先判断入口和系统版本
密码忘了,你是被挡在SSH层面上的,而不是硬盘加密层面,只要服务器还能重启,你就有一线机会,重置前先想清楚三个问题:
- 你能不能访问服务器控制台?物理机需要接显示器、键盘,或者用服务器自带的IPMI远程管理卡;云服务器则需要网页VNC或控制台登录。
- 根分区是否做了LUKS全盘加密?如果加密了,单用户模式也无法直接修改密码,必须先解锁加密盘。
- 系统用的是GRUB2还是旧版GRUB?现代主流发行版基本都是GRUB2,操作逻辑一致,但内核参数写法略有差异。
单用户模式之所以能绕过密码,是因为它启动时并不加载完整的登录验证流程,而是直接给你一个root shell,内核参数里加上init=/bin/bash或rd.break后,系统会停在一个早期环境中,让你手动接管。
不同发行版的linux重置root密码步骤差异
下面的步骤覆盖最常见的两个方向:CentOS系和Ubuntu系,如果你用的是云主机,可以直接跳到第三个模块看控制台方案。
CentOS单用户模式修改密码:rd.break完整步骤
CentOS 7/8/9等RHEL系系统,推荐用rd.break打断启动流程,步骤很简单:
- 重启服务器,出现GRUB菜单时按
e进入编辑模式。 - 找到以
linux16或linuxefi开头的那一行,在行尾加一个空格,然后输入rd.break。 - 按
Ctrl+x启动,系统会停在一个switch_root提示符下。 - 执行
mount -o remount,rw /sysroot,把根目录重新挂载为可写。 - 执行
chroot /sysroot,真正进入你原来的操作系统环境。 - 执行
passwd root,输入两次新密码。 - 如果系统开启了SELinux,执行
touch /.autorelabel,用于修正安全上下文。 - 输入
exit退出chroot,再输入exit继续启动,等系统自动重启完就好。
需要留意的是,很多教程里忘了第7步,没有autorelabel,CentOS可能启动后卡在登录界面,或者出现SELinux上下文错误,第4步的remount,rw也容易被忽略,根目录只读会让passwd直接报错。
Ubuntu忘记密码进入recovery模式:root shell操作
Ubuntu和Debian系的思路不一样,用的是GRUB里的recovery模式,操作路径如下:
- 开机时按住
Shift键,把GRUB菜单调出来;虚拟机或UEFI系统可能需要在开机Logo处快速按Esc。 - 选择
Advanced options for Ubuntu,进入高级选项。 - 选中带有
(recovery mode)字样的内核行。 - 在弹出的菜单里选
root shell to drop to a root shell prompt。 - 此时根目录可能处于只读状态,先执行
mount -o remount,rw /。 - 如果忘记的是root密码,直接执行
passwd root,如果忘记的是普通用户密码,执行passwd 用户名。 - 完成后输入
reboot重启。
特别注意,Ubuntu默认禁用root账户,平时你登录用的都是sudo用户,这种情况下,你重置的应该是你自己的普通用户密码,而不是root,如果确实想启用root,可以在root shell里执行passwd root设置后,再编辑/etc/ssh/sshd_config的PermitRootLogin选项。
云服务器场景:控制台和救援模式哪个更省事
云服务器和物理机不同,简米云、酷番云、华为云等平台都会在控制台提供“重置实例密码”功能,这个功能会在云底层帮你重装或重置系统密码,但需要重启实例,适合对命令行不熟悉的用户,它可能不会改动磁盘上的其他数据,但某些自定义启动参数或内核配置可能会丢。
另一种更灵活的方式是救援模式,大致流程是:先关机,然后在控制台把系统盘从实例上卸载,挂载到一台新的临时机器上,挂载到临时机器后编辑/etc/shadow文件,直接清空密码字段,再回到控制台把系统盘挂载回去,这种方式操作繁琐,但可控性最高,特别适合系统已经无法正常启动的情况。
| 场景 | 推荐入口 | 优点 | 缺点 |
|---|---|---|---|
| CentOS物理机/VM | rd.break单用户模式 | 步骤短,无需额外工具 | 需要重启服务器 |
| Ubuntu物理机/VM | recovery mode root shell | 菜单化,适合新手 | 需要耐心找菜单 |
| 云服务器 | 控制台重置 | 全图形化,无需命令 | 可能丢失启动配置 |
| 系统无法启动 | 救援模式挂载系统盘 | 可检查文件系统 | 操作复杂,需要临时机器 |
修改linux登录密码后必须立刻做的几件事
重置密码只是第一步,很多人在这一步就栽了跟头,新密码改完,结果SSH还是登不上,原因是配置文件或上下文没同步。
检查SSH配置是否允许密码登录
登录成功后,先检查/etc/ssh/sshd_config里的PasswordAuthentication是否为yes,如果之前为了安全关闭了密码认证,你现在用密码肯定进不来,可以用密钥登录,或者再进一次单用户模式改回来,改完配置后记得执行systemctl restart sshd或service sshd restart。
验证新密码是否真正生效
不要急着关掉当前窗口,先新开一个终端测试登录,执行ssh 用户名@服务器IP,用新密码试一次,如果使用的是sudo用户,也要确认sudo -l能正常提权,验证过后,再考虑清理现场。
清理重置过程留下的痕迹
如果你通过单用户模式执行过passwd,这些命令会记录在~/.bash_history里,执行history -c清空当前历史,或者直接删除/root/.bash_history文件,用救援模式挂载盘改密码的话,还需要确认启动引导参数里没有残留调试参数。
避坑指南:重置密码时最常见的4个错误
- 忘记把根目录重新挂载为读写状态,单用户模式下,根目录默认只读,直接执行
passwd会提示权限错误,这是个高频坑。 - 在chroot环境里直接重启,必须先
exit退出chroot环境,否则改动可能还没同步到磁盘就断了。 - 忽略了SELinux影响,CentOS系统上,重置密码后如果不执行
touch /.autorelabel,系统启动时可能无法正常使用文件上下文。 - 使用了太简单的密码,服务器一旦暴露在公网,弱密码会很快被自动扫描程序撞库,新密码至少12位,包含大小写字母、数字和特殊符号。
如何避免再次忘记服务器密码?日常管理建议
行业共识认为,密码管理的核心不是靠记忆,而是靠工具和流程,如果你手里只有两三台服务器,可以在本地密码管理器里保存密码;如果服务器数量较多,建议用集中认证方式,比如LDAP或Active Directory域控。
- 优先配置SSH密钥登录,密钥不是密码,不存在“忘记”的问题,只要私钥保管好,密码丢了也不会太影响使用。
- 定期轮换密码,每个季度或半年换一次,并把修改记录同步到内部文档。
- 为每台服务器设置唯一的密码,多台服务器共用一套密码,一旦泄露就等于全部暴露。
Q&A:linux服务器密码忘记常见问题
Q1:服务器密码忘了,但开启了LUKS全盘加密,还能重置吗?
如果只忘了系统密码,而LUKS加密盘的密码还记得,可以正常进入单用户模式后重置密码,如果加密盘的密码也忘了,那问题就不是系统登录能解决的了,此时数据恢复难度相当大,需要专业的磁盘救援工具或服务,盲目重置只会让情况更糟。
Q2:修改Linux登录密码和重置密码有什么区别?
修改密码是在已知旧密码的前提下更新密码,终端里执行passwd会先要求输入旧密码,重置密码是在忘记旧密码时,借助单用户模式或外部救援环境绕过验证,直接强制设置新密码,底层命令相同,只是操作路径完全不同。
Q3:重置密码会导致服务器上的网站服务受影响吗?
重启进入单用户模式会中断服务器上所有正在运行的进程,Web、数据库、临时服务都会停止,如果只是执行重置命令,不会修改业务文件,但为了稳妥,建议在业务低峰期操作,并提前通知相关同事,相比重装系统,这个影响已经小得多。
密码忘了不用慌,Linux给你留了后门,只要控制台入口能用、系统版本认准了,几分钟就能改回来,但更值得做的是培养密钥登录和密码管理的习惯,让“忘记密码”这个场景彻底消失。
首发原创文章,作者:王坚,如若转载,请注明出处:https://idctop.com/article/724307.html





