news 2026/9/18 4:07:29

虚拟机忘记密码?PE引导与单用户模式重置Windows/Linux密码

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
虚拟机忘记密码?PE引导与单用户模式重置Windows/Linux密码

群里隔三差五就有人问一句:“虚拟机破解密码怎么做?”点进去一看,截图多半是卡在登录界面。聊到最后基本都是同一个答案:不是要去动别人的系统,而是自己那台 Windows 或 Linux 虚拟机密码忘了,里面还有没来得及保存的脚本、配置、数据库连接信息,舍不得直接删掉重建。这篇文章我要聊的,正是这个场景——在你自己拥有并授权的虚拟机里,利用虚拟化层提供的便利,把遗忘的登录凭据重置掉。我不会去谈任何针对他人系统的破解手段,也没有必要,正经的运维和开发环境里,绝大多数“虚拟机破解密码”的需求,本质都是密码恢复。适合看这篇内容的,包括忘了虚拟机管理密码的个人用户、给团队维护测试虚拟机的开发同学,以及刚开始用 VMware Workstation 或 VirtualBox、担心哪天把自己锁在门外的虚拟机新手。

1. 先搞清楚“破解密码”到底要解决什么问题

1.1 你可能遇到的三类真实场景

第一类,Windows 虚拟机的本机登录密码不记得了。常见于很久之前随手建了个 Win10 虚拟机,当时图省事设了一个临时密码,结果放了两三个月,再打开时怎么输都不对。更尴尬的是,这台虚拟机里可能还开着自动启动的数据库服务,数据都在里面,不能直接删了重来。

第二类,Linux 虚拟机的 root 密码或者某个普通用户密码想不起来。做开发的同学经常这样,测试环境一堆 Ubuntu、CentOS,密码随手设成 root、123456,后来为了安全改过一次,但改完没记录,过阵子再登录就彻底对不上号了。

第三类,同事交接虚拟机时没给密码。这种我遇到过好几次,原本负责环境的人离职了,把 VM 文件留在共享存储上,可密码没人知道。但请注意,这里有个前提:你确实拥有这台虚拟机的管理权限,公司把它分配给你管理,你只是为了继续接手这个环境,而不是去黑别人的机器。

所以先想明白:我们要做的是“重置密码”,不是也没必要去研究什么底层抓密码的技术。虚拟机能做到这件事,核心原因是虚拟化层把你的系统整个“包”起来了,可以随便挂载工具盘、改启动参数、回滚状态,这比物理机要灵活得多。

1.2 为什么虚拟机里做密码恢复比物理机容易

关键差别有三个。

第一,可以随意换引导介质。物理机想重置密码,要么拆机、要么做启动U盘,流程麻烦;虚拟机只需要在设置里把 ISO 镜像挂到 CD/DVD 驱动器,重新启动就直接从工具盘引导了。

第二,可以修改内核启动参数。Linux 物理机想进单用户模式,开机过程一闪而过,经常来不及按按键;虚拟机里可以在 GRUB 菜单慢慢敲,甚至把启动参数截下来研究清楚再继续。

第三,快照和整体备份。这是物理机完全比不了的优势,操作前拍一个快照,改坏了直接回滚,整个过程毫无压力。虚拟机磁盘本身就是一个文件,还可以先整体复制一份做备份,安全性远超物理机。

1.3 必须划清的边界

提示:以下所有操作都只适用于“你自己创建、团队分配给你管理、或已获得明确授权处理的虚拟机”。用同样的方法去重置别人机器的密码,无论对象是谁、动机是什么,都属于越权行为。我写这篇内容只为了应对遗忘密码这种正经需求,请一定确认自己有权限再动手。

这个边界不是客套话,而是“虚拟机破解密码”这个主题里最容易被忽略的一点。网上很多教程把手段讲得天花乱坠,但从不提权限边界,最后被误用的案例太多了。作为从业者,我觉得有责任把丑话说在前面。

2. 动手前的准备:工具、镜像与后悔药

2.1 需要准备的三样东西

第一样是虚拟机软件本身。VMware Workstation 17、VirtualBox 都行,我日常用得最多的是 VMware Workstation Pro,因为挂载 ISO、编辑虚拟机设置、拍快照这些操作都在图形界面里点几下就能完成,对新手友好。VirtualBox 同样能做,只是路径稍有差异,核心思路没区别。

第二样是引导用的系统镜像。Windows 虚拟机需要准备一个 Windows PE 类型的启动镜像,PE 里一般自带密码重置工具,或者你另外下载一个独立的 NT 密码编辑工具放进去。Linux 虚拟机更简单,准备一个对应发行版的 Live CD 镜像就行,比如 Ubuntu 24.04 LTS Desktop ISO,也可以直接用同版本的系统安装盘选“试用”模式。

第三样是磁盘空间。虚拟机本来就要占空间,再加上一个 ISO 和一份备份文件,建议预留至少 20GB 的可用空间,避免操作到一半发现盘满了。

注意:下载 PE 或 Live 镜像请务必去官方渠道或可信站点,不要随便用来路不明的“装机工具”,尤其是号称“一键破解密码、无限修复”的那种,里面塞没塞后门谁也说不清。

2.2 快照不是可选项,是必选项

我一再强调,所有密码重置操作,动手前第一件事就是拍快照。在 VMware 里操作很直接:先关闭虚拟机,然后在菜单栏点击“虚拟机 → 快照 → 拍摄快照”,给快照起一个容易认的名字,比如“重置密码前备份”,加上描述说明一下当前状态。

为什么快照这么重要?因为密码重置的本质是修改系统认证文件——Windows 里是 SAM 文件,Linux 里是 /etc/shadow。这两个文件一旦写错,结果不只是“密码改不回来”,还可能出现账户被禁用、管理员组被破坏、系统启动直接失败等问题。有了快照,你随时可以回到操作前的状态重新再来;没有快照,那就要折腾很久去修复一个本来很简单的问题。

2.3 整体备份磁盘文件

除了快照,我还建议在操作前把虚拟机的磁盘文件复制一份到别的位置。VMware Workstation 虚拟机目录里的 .vmdk 文件就是你的整个磁盘;VirtualBox 里则是 .vdi。直接复制文件时,要先确保虚拟机处于关机状态,否则文件可能不一致。

也许有人觉得快照已经够了,为什么还要整个复制一份?因为快照是“挂”在当前虚拟机上的,万一后面误操作把虚拟机删了、或者快照链本身出问题,那才是真没救了。磁盘文件备份是最后一道保险,放那儿不动,安心不少。

3. Windows 虚拟机密码重置:PE 路线为主

3.1 使用 PE 引导并重置密码

这是目前最通用、成功率最高的 Windows 密码恢复方式。整体思路是:让虚拟机先从 PE 启动,然后在 PE 环境里直接修改系统磁盘上的 SAM 数据库,把对应用户的密码清空或重置。

具体操作步骤我拆开讲。

第一步,编辑虚拟机设置,把 PE 的 ISO 镜像挂载到 CD/DVD 驱动器,并确保开机时从该设备启动。在 VMware 里,可以在“虚拟机设置 → CD/DVD (SATA) → 使用 ISO 镜像文件”中完成。启动时如果直接进了原系统,说明引导顺序不对,可以重启后在出现 VMware Logo 时快速按 F2 进入 BIOS 设置,把 CD/DVD 启动顺序调到最前。

第二步,从 PE 启动后,系统会进入一个精简的桌面环境。不同 PE 工具界面有差异,但基本都内置了“密码修改”“密码重置”这类功能,通常需要单独打开。

第三步,在密码重置工具里选择系统盘里的 SAM 文件。路径一般是C:\Windows\System32\config\SAM。注意,PE 环境下盘符可能与正常系统不同,要根据卷标和目录结构判断哪一个是系统盘,别选到 PE 自己的虚拟盘。

第四步,工具会列出 SAM 中的用户列表,选中目标账户,选择“清空密码”或“修改密码”。我倾向于直接清空,这样重启进入系统后,可以重新设置一个自己记得住的新密码。

第五步,修改完成后重启虚拟机。重启前记得把 ISO 从虚拟光驱里卸载,或者修改引导顺序回到硬盘优先。正常启动后,用空密码或新密码登录,然后立刻去“设置 → 账户”里重新设置正式密码。

3.2 额外思路:命令提示符替换法

除了 PE 路线,还有一种经常被提到的旧方法——命令提示符替换法,江湖上常叫“粘滞键后门”。它的原理很简单:Windows 登录界面按 5 次 Shift 会触发粘滞键(sethc.exe),如果把 sethc.exe 替换成 cmd.exe,那么在这时候就能打开一个命令提示符窗口,在里面执行net user 用户名 新密码就能改掉密码。

操作流程是这样的:用 Windows 系统安装光盘或恢复环境引导,按下 Shift+F10 打开命令提示符,先用dir c:\确认系统盘盘符(Windows RE 环境下可能是 D:),然后依次执行:

copy /b C:\Windows\System32\sethc.exe C:\Windows\System32\sethc.exe.bak copy /b C:\Windows\System32\cmd.exe C:\Windows\System32\sethc.exe

重启进入系统,在登录界面按 5 次 Shift,窗口弹出后执行:

net user Administrator 你要设置的新密码

我之所以说它是“额外思路”,是因为这个方法在现代 Windows 10/11 上已经没那么好用:一是系统文件保护机制经常拦截 sethc.exe 的替换,二是杀毒软件会把这种替换行为直接当风险处理,三是如果系统盘启用了 BitLocker 加密,离线修改系统文件这条路基本走不通。所以现在的首选方案,我依然推荐 PE 工具。

3.3 Windows 重置的几个坑

说几个实操中容易踩的坑。

第一,BitLocker 加密的问题。如果虚拟机启用了 BitLocker,SAM 文件是加密存储在磁盘上的,PE 工具理论上读不到真实内容,强行改密码大概率失败。遇到这种情况,你得先解决磁盘解锁问题,而这又需要恢复密钥。所以在日常使用中,如果虚拟机里存了重要数据,我不建议随手就开 BitLocker,除非你有完整的恢复密钥备份。

第二,分清 UEFI 和 Legacy BIOS。新版的虚拟机默认可能是 UEFI 引导,PE 镜像也要用支持 UEFI 的版本,否则启动时会卡住。如果 PE 进入后看不到硬盘,大概率是启动模式不对,去虚拟机设置里把固件类型调整成兼容模式再试。

第三,不要修改默认账户的禁用状态。PE 工具里可以“启用/禁用账户”,有些教程会让你直接启用 Administrator 账户,但如果你不小心把自己常用的标准账户禁用了,登录进去会发现权限乱七八糟,还不如老老实实只改密码。

4. Linux 虚拟机密码重置:单用户模式和 Live 环境

4.1 通过 GRUB 加参数进入紧急模式

Linux 虚拟机密码重置的思路和 Windows 完全不同,不需要用第三方工具修改密码文件,而是直接利用系统内核本身的启动机制。最常见的做法是修改 GRUB 启动参数,让系统临时进入单用户或紧急模式,在这个模式下不需要密码就能拿到 root shell,然后直接修改密码。

以 CentOS/RHEL/Fedora 这类 systemd 发行版为例,操作如下:

第一步,重启虚拟机,在 GRUB 菜单出现时按键盘上的e进入编辑模式。

第二步,找到以linuxlinuxefi开头的那一行,这一行包含了内核启动参数。在这一行的末尾,先敲一个空格,然后加上rd.break

linux /vmlinuz-... root=/dev/mapper/... ro ... rd.break

第三步,按Ctrl+XF10启动。系统会进入一个基于 initramfs 的紧急 shell,提示符类似switch_root:/#。此时根文件系统被挂载在/sysroot且处于只读状态,需要先改成可写:

mount -o remount,rw /sysroot chroot /sysroot

第四步,进入真实的系统环境后,直接修改 root 密码:

passwd root

如果系统启用了 SELinux 强制模式,建议同时创建一个重新标记文件,否则重启后可能因为安全上下文问题导致登录异常:

touch /.autorelabel

第五步,输入两次exit退出 chroot 和 initramfs,系统会自动重启。启动过程会比平时慢一些,因为 SELinux 在做重新标记,属正常现象,耐心等待即可。

4.2 更简单的 init=/bin/bash 方式

除了rd.break,还有另一个更直接的参数:init=/bin/bash。它的意思是,在内核启动的最后阶段不启动 systemd,直接拉起一个 bash。

同样是进入 GRUB 编辑,在linux那行末尾加:

init=/bin/bash

启动后你会直接看到一个 root shell,不过此时根文件系统多半还是只读的,先重新挂载:

mount -o remount,rw / passwd root

这里有个前提要注意:如果根文件系统本身就是 LVM 逻辑卷,系统启动到该阶段时 LVM 通常已经被内核初始化好了,所以可以直接操作。如果遇到看不到逻辑卷或无法挂载的情况,还是回到rd.break或者用下面的 Live 方式,不要死磕这一种。

4.3 通过 Live 系统 chroot 修改密码

另一种思路是“外部介入”,用一个独立的 Linux Live 系统启动虚拟机,然后把原系统的磁盘挂载到一个目录里,再通过 chroot 进入原系统修改密码。这个方法更保险,尤其适合根文件系统情况比较复杂、或者 GRUB 已经损坏的场景。

具体步骤如下:

第一步,在虚拟机设置里挂载 Ubuntu 或对应发行版的 Live ISO,比如 Ubuntu 24.04 LTS Desktop 镜像,从光盘启动并选择Try Ubuntu进入桌面环境。

第二步,打开终端,查看磁盘分区情况:

lsblk

一般能看到原系统的根分区,比如/dev/sda2。如果系统用了 LVM,你可能看到的是类似/dev/mapper/ubuntu--vg-ubuntu--lv这样的设备名。

第三步,挂载根分区到 /mnt:

sudo mount /dev/sda2 /mnt

如果/boot是独立分区,也要挂载上:

sudo mount /dev/sda1 /mnt/boot

第四步,chroot 进入原系统:

sudo chroot /mnt passwd 你的用户名

如果是修改某个普通用户而不是 root,就直接使用用户名;想改 root 密码,则执行passwd root

第五步,退出并重启:

exit sudo reboot

重启时记得把 Live ISO 移除,让它从硬盘正常启动。

4.4 SELinux、磁盘加密和 cloud-init 等特殊情况

这几个特殊情况我单独拿出来说,因为真的坑过不少人。

SELinux 的问题我在 4.1 里提过一次。如果你用的是 RHEL/CentOS/Fedora,并且在 chroot 或紧急模式里改了密码,重启后大概率会被 SELinux 拦截,现象是输入正确密码依然无法登录,或者反复回到登录界面。解决办法就是操作完顺手执行touch /.autorelabel,让系统在下次启动时自动修正安全上下文。

磁盘加密场景要复杂得多。如果当初安装系统时选择了全盘加密(LUKS),那在rd.break模式下根本看不到明文系统,更别说改密码了。这种情况下,你必须先掌握 LUKS 的密码或恢复密钥,在启动引导阶段先解锁磁盘,才能进到下一步。需要说明的是,如果连 LUKS 密码也忘了,那就不是重置系统密码能解决的问题了,这层加密本身就是保护数据的,忘了就等于彻底丢失访问能力。

cloud-init 覆盖密码的情况在云镜像里很常见。用 openstack、Proxmox 模板或者官方云镜像创建的虚拟机,首次启动时 cloud-init 可能接管用户配置,把你辛辛苦苦改好的密码在启动阶段又覆盖回默认值。遇到这种情况,改完密码之后要检查一下/etc/cloud/cloud.cfg里的配置,或者干脆用系统自带的管理工具(如passwd后立即登录一次)确认没有再次变化。

5. 常见问题与排错实录

5.1 密码重置失败速查表

说到这儿,我把实操中遇到最多的问题整理成一个速查表,方便你对症下药。

现象可能原因解决方法
PE 工具里找不到 SAM 文件磁盘未正确识别、BitLocker 加密确认系统安装盘;先解锁 BitLocker;换支持 UEFI 的 PE
Windows 清空密码后无法登录误禁用管理员账户、账户被工具改动回滚快照重来;用 PE 把账户重新加回管理员组
Linux 改完密码重启又变回原样cloud-init 覆盖、操作时忘了重新挂载 rw检查 cloud-init 配置;确认mount -o remount,rw /
Linux 重置密码后被 SELinux 拦截忘记生成.autorelabel重新进入紧急模式执行touch /.autorelabel后重启
修改密码时报“只读文件系统”根分区没有以 rw 方式重新挂载执行mount -o remount,rw //sysroot
虚拟机意外断电后启动提示异常上次非正常关机正常选择启动,进入系统后拍新快照

5.2 我踩过的几个坑

先说一个最便宜的教训:有一次帮同事重置一台 CentOS 虚拟机密码,全部操作都搞完了,重启却发现连系统都进不去。排查了半天,发现是 GRUB 参数里多加了一个不认识的参数,把引导搞崩了。还好动手前拍过快照,回滚之后重新操作,十分钟解决。从那以后,我再也不省拍快照这一步。

另一个容易忽略的问题是 VMware 的“虚拟机上次意外关机”提示。密码重置过程中如果虚拟机不小心被强制断电,下次开机 VMware 会问你是“我已移动该虚拟机”还是“已复制该虚拟机”之类的问题,有时界面会卡一下。遇到这种情况不用慌,按提示选择“继续启动”基本都能进,进去后再重新拍快照做标记即可。

再有就是分区识别问题。给一台 LVM 布局的 Linux 虚拟机做 Live 重置时,我照着笔记挂载/dev/sda2却一直失败,后来才发现它根本不是根分区,真正的根逻辑卷在/dev/mapper/centos-root。现在我的习惯是,无论什么发行版,都先用lsblk -f看一遍文件系统类型和挂载点,再决定往哪个设备上挂载,千万别凭记忆猜。

5.3 收尾工作不能省

密码重置成功后,很多人觉得万事大吉,直接把虚拟机关了。我建议你多留几分钟做三件小事。

第一,拍一个新快照,命名里带上日期和“密码已重置”这样的关键词。以后如果再出问题,你知道哪个快照是安全状态。

第二,把新密码记录到密码管理器里,或者至少写进团队共享的密码库。密码重置这件事最怕的就是“改完又忘”,下次再重置一轮纯属浪费时间。

第三,检查一下虚拟机里的加密功能、登录验证方式等策略。比如 Windows 重置完空密码后,是否开了 Windows Hello 相关选项;Linux 改了 root 密码,是否还需要更新/etc/shadow的相关策略。这些细枝末节看起来不起眼,却决定着你下一次访问虚拟机是否顺利。

再补一个和我操作习惯直接相关的小技巧:我会在宿主机上单独建一个iso-tools目录,里面固定存放 PE 镜像、常用 Linux Live ISO、以及一份记录常用虚拟机账号密码的加密笔记。这样每次遇到进不去的虚拟机,直接挂载现成镜像,按笔记流程走,正常情况 10 分钟以内就能恢复访问。密码重置这活,做熟了就是个标准流程,真正拉开差距的,是细节里的认真和习惯上的稳妥。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/18 4:07:03

老款 Mac 升级 macOS 完整指南:OpenCore Legacy Patcher 从零到开机

老款 Mac 升级 macOS 完整指南:OpenCore Legacy Patcher 从零到开机 【免费下载链接】OpenCore-Legacy-Patcher Experience macOS just like before 项目地址: https://gitcode.com/GitHub_Trending/op/OpenCore-Legacy-Patcher 按流程走完,老款 …

作者头像 李华
网站建设 2026/9/18 4:05:50

本地项目问答系统搭建指南:原理、步骤与调优实战

这道题我盯了好一阵子——一个能直接问你本地代码库的智能问答工具,不需要把代码传到任何云端服务,不用注册账号,不用考虑数据出境风险,所有交互都发生在自己的机器上。我把整套流程跑通之后,最大的感受是:…

作者头像 李华
网站建设 2026/9/18 4:05:42

高教社杯C题:蔬菜自动定价与补货决策全解析

简介:一份面向2023年高教社全国大学生数学建模竞赛C题的完整参考论文,重点围绕蔬菜类商品自动定价与补货决策问题展开,适合参赛团队用于赛题复盘、模型对比与论文框架参考,也可作为运筹优化方向毕业设计的写作模板。论文系统覆盖四…

作者头像 李华
网站建设 2026/9/18 4:05:32

TheAgentCompany 里 Bash 超过类型化接口,TaoToken 发 Key 给 Opus-4.8

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/18 4:05:22

信贷风控Vintage、滚动率、迁移率:账龄分析与拨备SQL落地

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/18 4:04:44

用Go实现递归冒泡排序:原理、源码与性能分析

先聊个有意思的事:冒泡排序几乎是每个人学算法的第一堂课,教科书上写的版本基本都是两层循环套着走。可一旦面试官问“能不能用递归实现一个冒泡排序”,不少人就卡住了。其实递归冒泡排序(recursive bubble sort)本身没…

作者头像 李华