ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

虚拟机用户密码修改与重置:从入门到故障排查全攻略

虚拟机用户密码修改与重置:从入门到故障排查全攻略 用虚拟机这些年我印象最深的一次翻车就是刚装好一台Ubuntu虚拟机随手设了一个自己都记不住的复杂密码第二天就再也登不进去了。后来在GRUB命令行里折腾了半天才把用户密码重置回来。说实话修改虚拟机用户密码这件事看着像是最基础的入门操作真上手之后却藏着不少坑认不清发行版、分不清单用户模式、挂载只读导致认证失败、Windows虚拟机还有另一套完全不同的逻辑……这篇就来把“如何修改虚拟机用户密码”这件事彻底讲清楚从主动改密到忘记密码重置再到改完密码之后那些容易被忽略的连锁问题一次理清。内容同时覆盖VMware Workstation和VirtualBox两种最常见的单机虚拟机场景Linux和Windows系统的改密方法都会说到适合刚接触虚拟机的新手也适合被“忘密码”折磨过的老手直接抄作业。1. 为什么虚拟机的用户密码这么容易被忽略1.1 虚拟机里的用户密码本质上也是“门锁”很多人觉得虚拟机的密码不重要理由很统一“这就是个测试环境挂了就挂了大不了重装。”但真实情况是虚拟机里的系统和你物理机上的系统在权限和认证层面没有任何区别。Linux靠/etc/passwd和/etc/shadow维护用户信息Windows靠SAM注册表文件维护账户信息你修改密码实际上就是在修改虚拟磁盘里的这些文件而不是什么“模拟”出来的假账号。换句话说虚拟机只是把物理硬件换成了虚拟硬件但里面的操作系统是完整真实运行的密码保护机制也一并延续下来了。我在实际工作中见过太多次这种场景拉了一个虚拟机镜像里面所有机器共用一套默认账号密码然后扔给团队几个人一起用。有人需要装个软件就顺手改了下密码结果整个团队的登录凭据全部失效谁都不知道新密码是什么。这就是典型的“重装成本不高但返工成本极高”的事故。所以虚拟机密码管理其实是你开始正式使用虚拟机的时候第一件就该认真对待的事。1.2 哪些场景会让你必须动“改密码”这个念头结合我平时接触到的案例常见的改密码场景可以归纳成这几类。第一类是刚装完系统时的初始化。不管你是照着教程装Ubuntu、CentOS还是Windows安装向导里设置的那个密码通常比较随意上了生产用途之后必须改成符合复杂度要求的独立密码避免镜像里的默认口令留在运行环境里。第二类是虚拟机被克隆或者被分发之后。克隆出来的虚拟机默认情况下拥有和源虚拟机一模一样的账户和密码。很多教程只教你怎么克隆却不提醒你克隆之后立刻改密码结果就是一批虚拟机全部共用同一套凭据安全风险非常突出。第三类是多人共享一台虚拟机。研发团队内部互借虚拟机跑测试是常态人员交接的时候上一任管理员留下的密码不会写在交接文档里与其反复猜不如走正规流程直接把相关账号的密码重置掉。第四类就是你忘掉了密码而且这台虚拟机还在跑着重要服务重装意味着数据全部作废。这种场景下“怎么把密码找回来”会直接从优先级最低的问题变成必须要解决的问题。1.3 这篇要帮你解决的具体问题围绕“修改虚拟机用户密码”这篇会按照三条线展开第一条线在你还记得密码的前提下如何分别修改Linux和Windows虚拟机中的用户密码第二条线在已经忘记密码的前提下如何在虚拟机环境中进入恢复模式重置密码第三条线改完密码之后可能出现的登录失败、认证失败、启动异常等典型问题以及对应的排查思路。这三条线覆盖了从虚拟机初始化、日常维护到故障恢复的完整路径对你后续使用虚拟机非常有价值。2. 动手改密码之前先把环境认清楚2.1 不同虚拟机平台下的操作入口差异修改虚拟机用户密码最核心的前提是先搞清楚你手里的虚拟机到底是什么平台、什么形态。常见的单机虚拟机环境主要就是VMware Workstation/VMware Fusion、Oracle VirtualBox、以及KVM/libvirt这些。云平台上的云主机本质上也是虚拟机但它的密码重置逻辑走的是另一个体系。先说VMware Workstation它通过一个“虚拟机控制台”窗口来模拟物理显示器你在控制台里看到的画面和操作方式跟在物理机前操作几乎一模一样。改密码的时候你可以像操作真机一样在控制台里打开终端或者设置界面。VirtualBox的操作逻辑也类似它的窗口同样模拟了一台完整的主机支持键盘和鼠标输入。这两个平台最大的共同点是虚拟机启动过程中你都可以介入引导阶段比如按F2进BIOS、按Esc进GRUB菜单这对我后面说的“用单用户模式重置密码”至关重要。KVM的话略有不同如果你没有配置图形化的virt-manager界面而是用命令行远程管理那通常是通过virsh console连接到串口控制台操作起来不如前面两个平台直观但对密码重置来说原理是相同的。云平台上的虚拟机则要特别注意很多云厂商的VNC/SPICE控制台在引导时无法让你灵活打断引导流程而且有些系统镜像默认禁止了串口、默认密码策略也非常严格这种情况下我更建议直接使用云平台提供的“重置密码”功能而不是去模仿单机虚拟机的GRUB操作因为很多步骤在云端环境根本走不通。2.2 分清“主动改密”和“遗忘重置”是两条不同路线我见过不少新手在“忘记密码”的时候却去网上搜“如何修改虚拟机用户密码”的教程结果看到的是passwd命令就以为自己已经掌握了解法实际上这两件事完全不是一回事。主动改密的前提是你知道当前密码并且已经成功登录系统。Linux下用passwd改自己的密码Windows下在账户设置里直接修改这套流程很简单。遗忘重置的前提是你已经完全进不去系统了而你手边唯一能操作的就是虚拟机的关机/开机和引导选项。在这种情况下你不仅不能依赖系统里已有的命令还要小心不要破坏原系统数据。这两条路线最大的区别在于操作地址不同。主动改密是在操作系统内部运行认证程序由系统自身负责把加密后的密码写入对应的存储文件遗忘重置则是通过特殊引导方式绕开正常登录流程直接以恢复权限去修改存储密码的文件。搞清楚这一点之后你在操作的时候才不容易把两步走成一步尤其是在恢复模式下别一进去就到处乱翻目标非常明确找到对应的密码存储文件并重置内容。2.3 修改密码前一定要做快照这一条是我吃了好几次亏才养成的习惯。VMware Workstation和VirtualBox都提供了快照Snapshot功能它的效果是在某个时间点给虚拟机的整个磁盘状态拍一张“照片”之后任何时候让你回退到这个时间点的状态。修改用户密码本质上是在操作系统内部执行敏感操作一旦发生误操作例如不小心把用户锁了、把sudo权限弄坏了、或者失手删掉了关键用户系统就会变得非常难处理。有了快照你只需要回滚到修改前的状态一分钟就能恢复。尤其在你尝试各种“忘记密码重置”的方法时快照更是保命用的。我自己在演示GRUB单用户模式改密码的时候前后会打两次快照一次在实验前一次在成功改完密码后中间无论哪一步出问题都不怕。这里也顺带提醒一句快照不是备份。快照依赖当前的虚拟磁盘文件如果你删掉了虚拟机原始的VMDK、VHD文件或者把虚拟机迁移到了另一台宿主机上快照很可能就失效了。所以重要数据该备份还是得备份不要把快照当成唯一保险。3. Linux虚拟机用户密码修改实操3.1 还记得当前密码的话用这几条命令就够了Linux系统下修改用户密码的命令最常用的就是passwd。当前登录用户想改自己的密码直接执行passwd系统会先要求输入当前密码然后输入两次新密码通过之后即时生效不需要重启虚拟机。这种方式最适合日常维护比如你已经用默认密码登录上了刚装好的Ubuntu虚拟机想立刻换掉初始密码只要在终端里运行这一条命令就可以。如果是管理员帮其他用户重置密码需要用到root权限。在Ubuntu、Debian等系统上通过sudo执行sudo passwd 用户名注意这里不需要输入这个用户的当前密码直接设置新的就行。在CentOS、RHEL等系统上如果你当前就是root用户直接执行passwd 用户名就完成了。它们之间的差异主要在是否默认启用了sudo以及root是否可以直接登录在我做的多台虚拟机测试中习惯做法是先确定当前用户是否有sudo权限再决定用哪种方式。还有一种适合脚本自动化或者批量设置的命令是chpasswd。比如想把名叫zhangsan的用户密码改成NewPass123可以这样操作echo zhangsan:NewPass123 | sudo chpasswdchpasswd的好处有三个一是非交互式执行适合在初始化脚本里批量设置二是不需要在终端里输入两遍密码减少人为失误三是它可以一次处理多个用户以“用户名:密码”的形式逐行喂给它就可以了。批量初始化一组虚拟机镜像时用chpasswd明显比一个个手动执行passwd效率高得多。3.2 忘记密码时通过GRUB进入单用户模式重置这是Linux虚拟机忘记密码时最核心的恢复手段。原理其实不复杂Linux引导过程中GRUB会加载内核如果我们通过编辑GRUB启动项让内核在启动时直接以指定运行级别或者指定init程序运行就可以绕开系统本身要求输入密码的登录流程进入一个拥有root权限的临时环境然后在里面修改密码。以最常见的RHEL系发行版CentOS、Rocky Linux、AlmaLinux等为例步骤如下第一步重启虚拟机在GRUB菜单界面出现时光标移动到默认内核那一行按字母e进入编辑模式。第二步找到以linux开头的那一行一般是linux /boot/vmlinuz-xxx或者linux16在行尾追加一个参数rd.break。这个参数的意思是在切换到真正的根文件系统之前停下来把当前环境扔给管理员处理。第三步按Ctrlx或者F10启动进入一个临时的内存环境。看到switch_root:/#提示符后先执行mount -o remount,rw /sysroot因为默认情况下/sysroot是只读挂载的不重新挂载成可读写就直接用passwd会报出经典的passwd: Authentication token manipulation error根本没有办法完成修改。这一步重挂载是很多人容易漏掉的关键操作。第四步用chroot切换到真实的系统根目录chroot /sysroot passwd root输入两遍新密码完成root密码重置。如果还想重置其他用户密码继续执行passwd 用户名即可。第五步更新SELinux上下文并退出touch /.autorelabel exit exit系统会继续完成启动流程你可能看到进度比平时慢一些这是在自动给文件系统重新标记SELinux标签属正常现象。等系统启动完成后用新密码登录即可。Debian系发行版Ubuntu、Debian本身操作上略有区别不需要rd.break而是把内核行末尾的ro quiet splash直接替换为rw init/bin/bash然后启动系统会直接进入一个root shell进入之后同样是执行passwd 用户名重置完成后执行reboot -f强制重启不影响原系统。在实操中还有个小技巧按e进入编辑模式的时候如果GRUB菜单是你之前没有见过的样式不要慌仔细观察有没有包含vmlinuz或者initrd的行那基本就是内核行。另外有的版本GRUB在文本模式下需要按Ctrle才跳到行尾有的直接用End键就行建议试验的时候两手准备。3.3 修改完Linux密码后容易踩的坑改完密码不等于万事大吉。我遇到的第一个坑是重启之后系统完全没有报错但登录时输入正确的密码界面却卡在原地表现为黑屏或者回到登录界面循环。排查下来很多情况是因为改密码用的恢复环境破坏了当前用户会话相关的配置或者桌面环境没有正常加载。解决思路很简单按CtrlAltF2切换到另一个TTY用命令行登录登录成功后再去修复桌面组件。这个问题跟密码本身已经没有关系了。第二个坑是关于密码过期和锁定状态。Linux系统允许配置密码有效期比如默认90天到期时间到了系统就会要求用户立即改密码。也有一种情况是管理员之前用passwd -l锁定了某个用户你这样看密码好像没错但实际上账户处于锁定状态。排查时用chage -l 用户名查看密码过期时间用passwd -S 用户名查看账户状态。如果看到L标志就说明被锁了root用户下执行passwd -u 用户名解锁。第三个坑是关于权限被收紧。修改密码时如果顺便动了用户的组、家目录权限或者sudo配置很可能导致原本能跑的服务突然起不来。比如/etc/sudoers文件权限被误改sudo就直接失效了。这类问题其实和密码无直接关系但经常被误报成“改完密码系统出问题了”。处理方法是提前用快照对比前后配置变化别靠猜。4. Windows虚拟机的用户密码修改实操4.1 还记得当前密码的话图形界面和命令行都行Windows虚拟机修改用户密码比Linux直观很多。在登录系统之后打开“设置 - 账户 - 登录选项”点击“密码”在“修改”区域输入当前密码和新密码即可完成修改。如果你用的是Windows 10/11 企业版或服务器版还可以通过“计算机管理 - 本地用户和组”去管理多个账户。命令行方式也很高效尤其是在多台Windows虚拟机需要统一切换本地密码的时候。用管理员身份打开命令提示符或者PowerShell执行net user 用户名 新密码比如把名为admin的用户密码改成Passw0rd!net user admin Passw0rd!如果要顺带把账户的“密码永不过期”属性打开加一个/expires:never参数。如果想把某账户设为禁用状态用net user admin /active:no实际上我更推荐在VMware Workstation里验证Windows虚拟机密码是否生效的方式是先通过控制台登录试一次再通过远程桌面RDP登录试一次。RDP会影响很多人容易忽略的一点Windows登录界面默认锁定当前控制台会话你通过RDP改密码之后控制台界面的状态和RDP会话的状态可能存在差异导致你明明改了密码在控制台上却仍然看到锁屏画面。这种情况按一下锁定界面的“其他用户”重新输入新账号信息就好。4.2 忘记Windows虚拟机密码时的重置思路Windows系统忘记密码比Linux麻烦一些因为Windows没有提供类似GRUB单用户模式那样的官方便捷入口在虚拟机里操作需要借助另外的手段。下面说三种我实际用过的恢复思路。第一种是使用系统安装介质或PE环境。你在虚拟机里挂载一个Windows安装镜像ISO设置为从光盘启动进入“修复计算机 - 疑难解答 - 命令提示符”。在这个命令提示符里可以定向操作目标系统盘。经典的离线重置方法是利用“启用粘滞键替换技巧”正常Windows登录界面连按五次Shift会弹出粘滞键程序sethc.exe我们可以用工具把它替换成cmd.exe从而在登录界面直接弹出命令行再执行net user重置密码。具体操作分几步进入修复环境的命令提示符先确定系统盘的盘符通常不再是C盘因为PE环境会重新分配盘符我一般用diskpart或wmic logicaldisk get name查看分区情况。然后执行move d:\windows\system32\sethc.exe d:\ copy d:\windows\system32\cmd.exe d:\windows\system32\sethc.exe第一行意思是把原来的sethc.exe改个名字备份起来第二行是用cmd程序顶替这个文件。重启虚拟机正常进入系统登录界面连续按五次Shift调出命令行然后执行net user 管理员 新密码。重置完成之后记得再进入恢复环境把文件还原因为如果你把改动留在生产系统里任何人都能在登录界面按五次Shift打出命令行这就等于把门锁换成了门帘安全等级瞬间归零。第二种方法是借用第三方的离线密码重置工具比如类似chntpw这类工具它可以直接修改Windows注册表里的SAM文件不需要进入系统。用法是把工具镜像挂载到虚拟机的光驱里从该镜像引导按提示选择目标系统和目标账户然后清空或重置密码。这个方法我已经验证过多次对Windows 10和Windows Server 2019/2022的本地账户都比较可靠但有一个前提你的虚拟机使用的是本地账户如果你登录的是微软在线账户SAM文件里保存的并不是实时密码这个方法就派不上用场了。第三种最省事的方案是直接用虚拟机平台的快照回滚到还能登录的那个状态。这个方法听上去有点“作弊”但非常有效尤其是你只是想在系统上临时做个操作改完密码忘了记账回滚快照能把系统恢复到你还有把握登录的时候。注意快照会把这个时间点之后产生的新数据一并回退掉所以只在不上生产数据的情况下用它。4.3 微软账号密码和本地账户密码必须分清楚Windows虚拟机和Linux虚拟机在“用户密码”上的最大不同就是Windows可能有微软在线账户和本地账户两种情况。如果你安装Windows时登录的是微软账号那么系统里保存的密码其实是一个本地缓存的凭据真正的密码管理权在微软服务器侧。你在虚拟机里通过设置界面修改密码走的是在线密码变更流程需要网络连通、需要可能触发双重验证整个过程中不依赖虚拟机自身的本地账户体系。在实际工作中我的建议是虚拟机里尽量使用本地账户。原因很简单改密码、重置密码、离线修复都基于本地账户这套体系操作可控、不受网络影响、不需要连到云端。如果一定要用微软账号请务必在系统里同时创建一个具有管理员权限的本地账户作为“逃生通道”这样虚拟机在完全断网、或者微软账户无法登录的情况下也有退路。5. 修改完密码后那些跟着一起出现的“怪问题”5.1 密码明明正确系统却一直提示认证失败这个问题在虚拟机上出现的概率远高于物理机主要原因有三个。第一个是键盘布局问题。VMware Workstation和VirtualBox默认向虚拟机模拟的键盘是标准104键美式布局但你自己的物理键盘可能设着中文输入法或者德语、法语布局。密码中包含特殊符号像、#、$的时候尤其在中文输入法环境下会打出中文标点导致密码认证失败。看到登录界面一直转圈或者提示“用户名或密码错误”时先检查一下虚拟机窗口右上角的输入法状态切回英文状态再试。第二个是小键盘NumLock的问题。密码里的数字用的是主键盘区和小键盘区如果虚拟机启动时NumLock状态和物理机不一致那么你用独立小键盘输入的数字串可能根本不等于你心里想的那个数字。解决方案很简单用最上面一排数字键输入密码。第三个是账户被锁定或者被禁用。Windows虚拟机连续输错密码会触发账户锁定策略默认锁定时间十分钟到半小时不等Linux中有PAM配置/etc/security/faillock.conf同样可能因为失败次数过多而锁定账户。这种情况下再多试密码也没有意义要么等锁定窗口过期要么去恢复环境里解锁。5.2 虚拟机启动异常蓝屏、卡logo、循环重启修改密码本身不会直接导致系统启动异常但很多人往往是把“改密码”和“改配置、清理空间、升级驱动”放在一起操作出问题之后归因成了“改密码导致”。我在虚拟机群里见过最多的case是用户在执行密码重置步骤时误改了内核启动参数、丢失了GRUB配置、或者破坏了引导分区重启后一张蓝屏或者光标闪烁。遇到启动异常先不要急着重装系统。第一步确认虚拟机的硬件兼容性比如你之前用的虚拟机版本是Workstation 15后来又用Workstation 17打开某些内核模块可能需要重新适配。第二步看引导日志比如Windows出现自动修复引导界面时进去选择“高级选项 - 启动设置 - 重启”按F8进入安全模式试试能不能登录。如果安全模式能进说明系统本身的账号数据库没有问题密码重置操作也没问题问题出在某个第三方驱动或者开机自启程序上。第三步直接回到快照点把我前面提到的快照回滚方案用起来这比研究蓝屏代码要快得多。还有一类启动异常是在宿主机层面出现的比如VMware Workstation突然报“无法连接到虚拟机”或者虚拟机平台提示被占用。这往往和Windows Hyper-V相关组件冲突有关和虚拟机内部改密码无关。处理方法是检查Windows功能中“虚拟机监控程序平台”和“虚拟机平台”的开关状态避免同一环境下Hyper-V与VMware并存冲突。5.3 改完密码之后网络、共享目录、计划任务“突然失效”Windows修改密码后出现“网络共享访问被拒绝”时很多人第一反应是共享权限变了其实更常见的原因是你改的密码和你保存的凭据不一致。Windows的凭据管理器里可能存着旧密码的凭据Windows服务比如计划任务、IIS应用池也各自有“登录身份”密码信息它们不会因为你执行net user自动同步。如果发现计划任务报0x80070569之类的错误就去“任务计划程序”修改任务的“运行用户”密码如果发现共享盘访问不了就在“控制面板 - 凭据管理器”里把对应共享的旧凭据删掉重新用新密码添加这个问题就能解决。Linux下也有类似的坑。比如你通过SSH密钥登录虚拟机修改密码后SSH密钥并不受影响因为SSH密钥登录走的是/root/.ssh/authorized_keys和密码认证是两套体系。但是像cron任务或者systemd服务里的文件如果有加密或者需要认证它们可能存储的是旧凭据换密码后只能手动更新。另外如果你在/etc/fstab里配置了需要密码的挂载点SMB、CIFS或LUKS加密盘密码变更后重启虚拟机会出现挂载失败系统可能因此卡在启动流程里。这个情况排查时可以用dmesg | grep -i password快速定位相关报错。5.4 虚拟机密码管理的几个推荐习惯根据我做虚拟机运维的实践最后总结几条非常“实战向”的习惯。第一条所有虚拟机首次初始化完成之后立刻改掉镜像默认密码并停用或删除默认安装时创建的临时账号。这条既适用于Linux也适用于Windows目的是避免多台虚拟机共用相同口令。第二条正规场景给重要虚拟机设置密码策略。Linux可以通过/etc/login.defs和pam_pwquality来管理密码长度和复杂度Windows可以通过“本地安全策略 - 账户策略”来设置。如果只是个人折腾的测试机那就确保密码兼顾复杂度和你能记住的程度别陷入“密码复杂到谁都记不住”的悖论。第三条养成修改前打快照的习惯修改后确认能登录再删掉之前的临时快照。一个命名规范的快照比如“before-password-change”能让你在操作失误时两分钟回到原点。第四条把“修改用户密码”这件事纳入虚拟机存档管理的一部分。每次给虚拟机改名、克隆、迁移或者交付给其他人之前都重新确认一次当前系统内到底有哪些用户、有没有密码过期、有没有锁定状态。批量管理多台虚拟机时我通常直接把修改密码脚本写进初始化配置流程用chpasswd或者PowerShell统一执行避免一台一台手点。6. 下一个要解决的是“改IP”和“网络访问”既然这篇是“如何使用虚拟机一”我可以先告诉你接下来大概率会遇到的问题密码处理好之后你要面对的就是IP地址。虚拟机的IP地址和宿主机怎么互通、怎么固定静态IP、怎么配置多站点自定义域名这几乎是所有虚拟机用户跨不过去的一道坎。你在VMware里装完Ubuntu虚拟机重启一次IP就变了SSH连接也断了到时候你又会发现原来在虚拟机里配置网络比改密码更要细心。后面我会专门写一篇修改虚拟机IP地址和网络连接的内容有需要的话可以顺着这个系列继续看。最后再分享一个我个人的习惯。每次我成功重置完一台虚拟机的用户密码都会顺手做两件事第一在宿主机上新建一个文本说明文件把虚拟机的机器名、用户名、密码变更日期、谁负责这台机器这些信息列一个表这个文件虽然不在虚拟机里但对我这种同时维护十几台虚拟机的人来说相当于一个最简陋的资产管理清单第二马上把旧密码从各种命令行历史和笔记软件里清掉避免下次自己都分不清哪个是当前有效密码。别笑这种低级错误我踩过不止一次——有一次我把新密码写进了笔记然后命令行历史里还留着旧密码一周之后再登录我自己都试了一整天才确定是新密码还是旧密码。密码这件事多数时候不是被强猜的而是自己把自己绕晕的。希望这篇内容能帮你绕开这些坑把虚拟机的密码管理理顺。
返回列表