ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

虚拟机密码重置全攻略:从Linux、Windows到Artifactory/ES

虚拟机密码重置全攻略:从Linux、Windows到Artifactory/ES 虚拟机用着用着突然发现密码忘了这事儿我碰见过不止一次。尤其是VMware Workstation现在个人免费之后身边用虚拟机的人越来越多问题也跟着来了装的系统太多密码记混临时起的测试机密码随手一敲放几天就没人记得更尴尬的是帮同事处理一台虚拟机交接文档里压根没写密码。说实话虚拟机密码忘记这种事比起物理机来要友好得多。因为虚拟机的本质是一个磁盘文件加一份配置文件你完全可以用各种方式“绕过”系统启动流程去改密码不用拆机、不用刷BIOS更不用担心弄坏了没地方哭。这篇文章就把虚拟机密码重置这件事讲透覆盖Linux、Windows、以及虚拟机里装的中间件Artifactory、Elasticsearch密码找回基本都是我自己实际操作验证过的路子照着做就行。1. 动手之前先想明白三件事1.1 虚拟机密码重置和物理机到底有什么不一样很多人一听到“重置密码”就头皮发麻觉得这是件很危险的事。实际上虚拟机的架构决定了它的容错性远高于物理机。物理机改密码你只能进系统里操作或者靠PE、LiveCD这些外部介质引导。一旦引导过程中断电、操作失误机器可能就起不来了。而虚拟机不一样它的“身体”就是宿主机上的一个虚拟磁盘文件比如VMware的vmdk、VirtualBox的vdi再加上一份记录硬件配置的vmx/vbox文件。你要改密码本质上就是对这个磁盘文件做“离线修改”或者“引导修复”。这意味着三件事第一你可以随意挂载别的启动介质ISO镜像、PE工具盘因为虚拟光驱和虚拟USB想怎么配就怎么配。第二你可以给虚拟机拍快照改密码之前拍一张改坏了秒回滚物理机可没有这个待遇。第三哪怕虚拟机彻底进不了系统只要那个虚拟磁盘文件还在把磁盘挂到另一个能用的虚拟机上照样能找回密码。所以虚拟机密码重置的第一原则是不用慌虚拟机一般不会被你“折腾死”就怕你不做任何备份就直接上。我见过太多人连快照都不拍就冲进去改密码最后把一套环境搞得乌烟瘴气反而花了更多时间恢复。1.2 先备份还是先折腾我的建议是先拍快照这是所有操作之前必须做的一步不是可选步骤。在VMware Workstation里操作路径很简单右键虚拟机 - 快照 - 拍摄快照。快照名称建议写清楚比如“改密码前_20241120”。VirtualBox里就是“备份 - 生成备份”。有些人的顾虑是“虚拟机太大快照拍半天”。这里给个实用建议快照不是完整拷贝绝大多数虚拟化软件的快照走的是“增量”机制拍摄速度很快占用空间也不会像复制整个vmdk那么大。哪怕这个虚拟机有20个G拍一张快照也就十几秒到半分钟的事。除了快照如果条件允许我还会顺手把虚拟机的配置文件vmx复制一份再把关键数据目录备份一下。这样万一真出问题至少能恢复到操作前的状态。至于那些连“关闭虚拟机”都懒得的急性子我劝你还是多等那半分钟虚拟机开着的时候动虚拟磁盘属于给自己挖坑。备份之后正式开始重置密码之前还要确认一件事当前虚拟机处于关机状态或者至少不在处理重要任务的状态。修改密码涉及写系统关键文件如果系统还在跑服务强行改文件可能导致文件系统损坏那就不是重置密码的问题了。1.3 准备一套趁手的“工具箱”不同系统、不同场景需要的东西不一样但万变不离其宗我一般会备好这几样系统安装ISO镜像CentOS、Ubuntu、Windows的安装盘镜像都留着。它们不仅能装系统还能进“修复模式”“恢复环境”是重置密码的万能钥匙。WinPE镜像对Windows虚拟机来说PE盘就是“手术台”。网上有微PE、通用PE等很多免费PE做成ISO文件就能挂到虚拟机光驱里。应急工具集像NTPWEditWindows密码工具、PasswdLinux下的密码修改命令、chntpw离线改Windows注册表和SAM文件的命令行工具这些用的时候再下也行但提前备好在PE镜像里更省事。基本的概念储备GRUB菜单怎么进、BIOS/UEFI启动顺序怎么调、磁盘分区怎么识别。这些概念不搞懂手上有再好的工具也使不出来。我这里特别提醒一句很多PE工具盘是带图形界面的对新手友好但部分PE在虚拟机里可能因为驱动问题启动异常。所以我通常会准备两个PE镜像一个图形界面版的一个纯命令行精简版的哪个能启动用哪个。这个细节看起来小实际踩坑时能救你命。2. Linux虚拟机密码重置实操2.1 CentOS 7用rd.break重置root密码CentOS 7是我平时用得最多的虚拟机系统重置root密码的思路也最成熟。核心是利用GRUB引导菜单的编辑功能让系统在进入正式环境之前进入一个临时shell然后修改密码。步骤如下开机后在GRUB菜单界面按e键进入编辑模式。VMware里要注意客户机屏幕弹出后要立刻点击进去不然键盘焦点可能还在宿主机上按键没用。找到以linux16或linux开头的那一行通常在尾部有quiet字样在行尾追加一个参数rd.break。按CtrlX或者F10启动系统会进入一个initramfs里的紧急shell界面显示类似switch_root:/#的提示符。此时根文件系统还是只读挂载的需要先重新挂载为可写执行mount -o remount,rw /sysroot切换进真正的系统根目录chroot /sysroot用passwd修改root密码passwd root按提示输入两遍新密码。密码强度要够不然有的系统策略会拒绝。如果系统开启了SELinux需要执行touch /.autorelabel这一步的作用是让系统重启时重新标记文件的安全上下文否则SELinux标签错乱可能导致你改完密码后反而登不进去或者登录异常缓慢。连续输入exit退出chroot和shell或者直接输入reboot重启。重启后你就能用新密码登录root了。为什么这里推荐rd.break而不是老的single参数因为CentOS 7执行到single时可能受SELinux或者其他服务影响比较“脆”而rd.break在initramfs阶段就停下来了还没加载真正的系统服务操作面更单纯成功率更高。两者都会用能在不同系统版本间游刃有余。2.2 备选方案单用户模式与init参数修改如果用的是CentOS 6、老版本Ubuntu或者某些精简Linux发行版rd.break未必适用。这时候可以用传统的单用户模式。同样的开机进GRUB编辑界面找到linux16所在行这次把行尾的ro改成rw并追加一个参数single有的系统是数字1或init/bin/bash。启动后系统会直接进入单用户root shell然后直接passwd root就能改密码。这条路子最关键的一点是一定要把ro改成rw。我见过很多新手忽略了这一步进去之后执行passwd报“无法打开影子文件”之类的错误因为根分区是只读的。其实就算忘了改也可以先进shell再用mount -o remount,rw /补救但多一步操作总归多一处风险不如在GRUB里一次性改对。另外用init/bin/bash启动的系统很多时候PATH环境变量不全你执行passwd可能会提示找不到命令。这时候直接用绝对路径/usr/bin/passwd或者先export PATH/sbin:/usr/sbin:/bin:/usr/bin再操作。这种小细节遇到的时候真的能卡你十分钟。2.3 Ubuntu虚拟机怎么重置密码Ubuntu和CentOS不太一样因为很多Ubuntu虚拟机默认没有主动开启root登录你日常用的可能是一个普通sudo用户。重置密码同样有两条路。第一条路走系统自带的恢复模式。开机在GRUB菜单时按住Shift键Ubuntu的GRUB菜单默认是隐藏的不按Shift可能根本看不到然后选择Advanced options for Ubuntu再选Recovery mode进入后会有一个菜单选择root - Drop to root shell prompt。接下来就是熟悉的mount -o remount,rw /和passwd 用户名。如果忘记的是普通用户密码直接用passwd 你的用户名即可如果想顺带把root密码也设置一下执行passwd root。第二条路用Ubuntu安装ISO进Live环境。把Ubuntu安装镜像挂到虚拟光驱开机从光驱引导选择“试用UbuntuTry Ubuntu”进入桌面后用lsblk或fdisk -l查看磁盘分区找到根分区通常是sda1、sda2之类然后sudo mount /dev/sda1 /mnt sudo chroot /mnt passwd 用户名Live环境的好处是图形化界面直观对新手很友好。缺点是得想办法把英文的图形界面玩明白但也就那几步问题不大。这里补充一个特殊情况如果你改的是普通用户的密码而这个用户有sudo权限那完全可以借道其他用户来重置。比如你记得root密码但忘了普通用户密码登录root后一条sudo passwd 用户名就搞定了。很多人不知道这个绕了一大圈去进恢复模式其实没必要。2.4 UOS和银河麒麟虚拟机的重置方法热词里有人问UOS重置密码、银河麒麟虚拟机管理系统这两个属于国产Linux发行版在虚拟机里用的人也在变多。它们基本都是基于Debian或CentOS体系做的二次开发重置密码的思路和Ubuntu/CentOS大同小异但多了个官方工具。UOS统信桌面操作系统在开机GRUB菜单里选Advanced options for UOS进入恢复模式选择root shell同样passwd改密码。新版UOS还有个更省事的办法在登录界面连续按几次CtrlAltF2或F3-F6切到tty终端如果系统没锁root就直接登录改如果root也没有密码还是得走GRUB这条路。银河麒麟Kylin虚拟机的系统管理工具做得更全有的版本自带“重置密码”功能入口可以在系统安装介质里找到比如“系统修复” - “重置用户密码”。这个功能是图形界面引导的跟着提示走就行比命令行友好太多。不过它也不是万能的如果虚拟机系统损坏严重还是得靠Live CD挂载修改。这类系统的坑主要在以下几个方面一是root密码和普通用户密码要分清有时候你只想改普通用户的密码却因为习惯性输入passwd root结果报“用户不存在”之类的错二是这些系统的SELinux或者AppArmor策略可能更严改完密码如果登录异常先别急着怀疑是密码错了看看安全策略日志。3. Windows虚拟机密码重置实操3.1 准备WinPE启动镜像并挂载到虚拟机Windows虚拟机密码忘了思路比Linux还简单粗暴用PE盘启动直接改系统里的SAM数据库。SAM文件就是Windows存储密码哈希的数据库PE里的小工具能直接编辑它。首先准备一个WinPE镜像。微软官方有Windows PE工具包但对普通用户来说微PE、优启通这些第三方PE更友好图形界面中文自带密码工具。下载PE后利用它的“生成ISO”功能做一个可启动的ISO文件。这一步非常关键因为虚拟机光驱直接挂ISO最方便没必要U盘启动折腾来折腾去。在VMware里双击“CD/DVD”设备选择“使用ISO映像文件”浏览选中刚做好的PE ISO然后重点来了开机后立刻按F2进BIOS设置或者按F12弹出启动菜单把光驱/ISO启动调到第一位。有的虚拟机默认引导顺序里光驱在硬盘后面你不调顺序开机还是会直接进Windows然后提示密码错误白忙活。如果你手里的PE不是ISO而是U盘也可以把U盘制作成镜像再挂载或者直接用DiskGenius把U盘转换成vmdk虚拟磁盘挂到虚拟机上。我一般不推荐这条路因为要多一步转换而且U盘里往往有大量临时文件镜像会很大。除非你只有一个U盘PE且宿主机没法直接读它否则还是老老实实做ISO吧。3.2 用PE里的密码工具重置Windows密码PE启动成功后会进入一个精简版Windows桌面。找到密码工具最常见的是NTPWEdit、PCUnlocker或者“密码恢复”类工具。以NTPWEdit为例操作流程如下打开NTPWEdit它会自动读取到Windows系统目录下的SAM文件。如果识别不对手动指定到X:\Windows\System32\config\SAMX是PE里的系统盘盘符需要根据实际情况改。点击“打开”软件会列出系统里的所有本地用户账号。选中要重置密码的用户比如Administrator在“新密码”输入框里填入新密码也可以留空表示清空密码。点击“写入”或“应用”保存修改。关闭工具从PE里正常关机别直接拔电源别直接关闭虚拟机电源然后在VMware里把光驱重新改为“使用物理驱动器”或移除ISO开机进系统用新密码登录。这里有几点经验NTPWEdit这类工具改的是本地账号密码。如果是微软账号登录的Windows比如Microsoft Account这个方法不一定有效因为微软账号的密码验证在云端。好消息是虚拟机里大多数人用的是本地账号没绑Microsoft Account。改密码后Windows可能会提示“你已使用临时配置文件登录”之类的这是因为本地安全策略的某些缓存状态变了一般重启一两次就能正常不用紧张。如果密码工具提示“无法写入SAM文件”大概率是PE里对系统盘没有写权限换个PE镜像比如64位Windows PE或者用“以管理员身份运行”再试。3.3 不借助第三方工具的两个“笨办法”如果不想下载PE或者虚拟机里的Windows因为某些原因就是没法从PE启动还有两个利用系统自带功能的路子原理很巧妙。第一个办法替换粘滞键程序。Windows的粘滞键程序是sethc.exe当你按5次Shift时会弹出来。我们把这个程序替换成cmd.exe然后在登录界面按5次Shift就等于在系统权限下打开了命令行。步骤如下用系统安装ISO启动虚拟机在安装界面按ShiftF10打开命令提示符。这个命令提示符所在的环境是安装环境但能够访问硬盘。先查看磁盘盘符通常系统盘是C:dir C:\Windows\System32\sethc.exe备份并替换copy C:\Windows\System32\sethc.exe C:\Windows\System32\sethc.exe.bak copy C:\Windows\System32\cmd.exe C:\Windows\System32\sethc.exe关机重启拔掉安装ISO正常进Windows。在登录界面按5次Shift弹出的是命令行窗口在里面用net user命令修改或清空密码net user net user Administrator 新密码改完后建议恢复sethc.exe把备份文件拷回去免得留下安全后门。虽然虚拟机里无所谓但习惯要养好。第二个办法替换轻松使用工具utilman.exe。逻辑跟上面一模一样只是把目标从sethc.exe换成了utilman.exe操作入口是登录界面右下角的“轻松使用”按钮。这个办法的好处是不会误触5次Shift缺点是多一步点击。这两个办法的本质是“利用Windows安装环境访问系统文件篡改可交互的可执行文件来获得高权限命令行”。听起来很“黑客”但在自己的虚拟机上救急是没问题的。要注意的是如果系统盘开启了BitLocker加密这些方法都会失效需要BitLocker恢复密钥才能访问文件。4. 虚拟机里中间件密码重置补充4.1 Artifactory忘了admin密码怎么救热词里有“artifactory重置密码”这是JFrog出的制品仓库管理工具很多团队会在虚拟机里装一个给开发用。admin密码忘了其实不需要重装系统Artifactory里的admin密码存储位置是可以直接处理的。Artifactory的配置文件通常是$ARTIFACTORY_HOME/etc/security.access.access或者etc/security/security.xml。早期版本6.x及以前的admin密码在security.xml里有相关字段新版Artifactory7.x及以上改成了基于内部数据库存储。实操中最通用的办法是停止Artifactory服务。进入$ARTIFACTORY_HOME/etc/security/目录找到access相关的文件夹或文件。对于6.x版本可以直接编辑security.xml找到admin用户对应的password字段删掉或者改成空保存后重启Artifactory它会提示你重新设置admin密码。对于7.x版本更推荐用官方提供的密码恢复脚本位于$ARTIFACTORY_HOME/app/bin/下具体名称可能随版本略有不同但一般都有类似recoverPassword或者“password reset”功能的脚本执行后会生成一个临时链接通过链接重设密码。如果这些都不行终极手段是直接操作Artifactory内置的Derby数据库如果是内嵌Derby找到users表把admin的密码字段置空。这个操作比较硬核建议在官方文档指导下进行而且要提前备份整个$ARTIFACTORY_HOME目录。Artifactory这块我实际踩过的坑是很多教程让你直接删除security.xml里的密码字段但新版Artifactory重启后如果发现配置文件不完整可能直接把服务干挂。所以我每次都坚持先备份配置文件再动手这位移成本极低但收益极高。4.2 Elasticsearch 7.4.2内置用户密码重置热词里有“es7.4.2密码忘记怎么重置密码”正好ES 7.4.2是我很熟的一个版本。这个版本如果开启了x-pack安全认证内置的elastic用户密码忘了会导致Kibana登录不进去、API调用全部401。ES 7.4.2不像新版本那样有elasticsearch-reset-password这么便捷的命令但有个经典的改法找到ES安装目录下的config/elasticsearch.yml先看安全配置xpack.security.enabled: true最稳妥的方式是停掉所有ES节点把xpack.security.enabled临时改成false然后启动集群。启动后使用elasticsearch-users命令来管理用户。比如重置elastic用户的密码bin/elasticsearch-users userpasswd elastic -p 新密码这个命令会直接修改内部安全索引里的用户密码哈希。改完后把elasticsearch.yml里xpack.security.enabled重新改回true重启所有节点。为什么强调要临时关闭安全认证因为ES在安全认证开启的情况下重置密码的API也需要有效凭据才能调而你就是因为密码丢了才来的这个死循环只能通过临时关闭认证来打破。关闭认证期间ES是不设防的所以这个操作一定要快而且不要在生产环境的公网上搞。另外ES7.4.2有个坑如果你直接手动改内部安全索引里的哈希值格式很容易搞错。用官方elasticsearch-users命令就不会有这个问题它知道正确的哈希算法和存储位置。除非你确认自己熟悉它的内部结构否则别碰“直接改索引”这条路。4.3 虚拟机里各层密码遗忘的排查思路上面聊的是两个典型中间件。实际上虚拟机里最常见的密码场景分三类我在这里顺手理一下第一类是系统层密码。Linux的root/普通用户、Windows的管理员用前半篇讲的方法就能搞定。第二类是数据库密码。比如虚拟机里装了MySQL、PostgreSQL密码忘了。MySQL可以改配置文件跳过授权表验证skip-grant-tables然后再执行update user set authentication_stringpassword(新密码)之类的命令。PostgreSQL则是编辑pg_hba.conf临时改成trust认证重启后alter user改密码。数据库密码重置的核心思路也都是“临时绕过认证”跟我上面讲ES的思路一模一样。第三类是应用层密码。像GitLab的root密码、Jenkins的admin密码、Jira的admin密码每个软件都有自己的恢复机制。GitLab有Rails控制台可以直接改Jenkins可以直接改config.xml文件里的密码哈希Jira需要操作内部数据库。这些不在本文展开但思路是相通的先备份再找到密码存储的位置用该应用官方的恢复手段绕过去。5. 常见问题与避坑经验5.1 进不了GRUB菜单怎么办好多人卡在第一步开机根本见不到GRUB菜单直接进系统了按e也没反应。原因通常有两个。第一个是GRUB菜单被隐藏了Ubuntu尤其常见。解决办法开机后立刻长按ShiftBIOS引导或快速连按EscUEFI引导多按几次总没错。第二个原因是VMware客户机没有获得键盘焦点你按键都落在宿主机上了。解决方案是在虚拟机窗口出现的第一时间点击窗口内部然后再按热键。还有一个更隐蔽的原因虚拟机的引导模式和你进的GRUB版本不匹配。比如系统是用UEFI装的但你在VMware里把引导设置成了BIOS或者相反GRUB根本不会正常加载。这时候要先进BIOS确认启动模式是对的。如果实在进不了GRUB那就不进GRUB了直接用LiveCD/安装ISO挂载磁盘修改。把安装镜像挂到光驱从光驱启动进rescue模式或Live系统然后chroot进去改密码。这条路肯定能走通只是多花点时间。5.2 密码改完虚拟机无法正常启动怎么办这是最让人头大的情况。我把它拆成几个常见原因和对应的排查方法SELinux标签问题现象是登录界面无限转圈或者登录后系统异常卡顿。解决方法是回到GRUB的rd.break环境执行touch /.autorelabel再重启。这个我在前面已经提过但忍不住再强调一次因为我第一次亲手踩坑时就是因为忘了这步密码改了但系统也“半残”了。根文件系统只读现象是改密码时报“无法打开影子文件”。解决办法是检查是否执行了mount -o remount,rw /或mount -o remount,rw /sysroot。很多人在chroot进去之后忘了这一步折腾半天。/etc/shadow文件被锁定有些系统安全加固过给shadow文件加了不可变属性。用lsattr /etc/shadow查看如果有i标志用chattr -i /etc/shadow解除后再改密码改完建议恢复锁定。Windows系统损坏用PE工具改完密码后Windows蓝屏或无法启动多半是PE版本和系统版本架构不匹配比如64位PE去改32位系统导致的注册表操作问题或者PE里的某个工具动了不该动的东西。遇到这种就回滚快照换个更主流的PE重新来。5.3 快照之外建议你长期养成的两个习惯第一个习惯设置好密码之后立刻给虚拟机拍一张名为“已配置密码_初始状态”的快照。这样将来再出问题你有一个干净的出发点而不是只能往回找N天的旧快照。我自己的虚拟机通常保留三个快照干净的初始状态、改密码后、系统升级前。每次出问题都能快速定位该回滚到哪。第二个习惯把虚拟机的账号信息记录到密码管理器里。不是让你明文写在桌面的记事本里而是用KeePass、Bitwarden这类工具统一管理。每条记录写清楚虚拟机名称、系统版本、IP地址、用户名、密码、用途。没有这个习惯的人三天两头就会陷入“这台机器密码是多少来着”的焦虑中。5.4 给新手的几句实在话重置密码这事儿说难不难说简单也不简单关键看你手上有多少“备选方案”。我的建议是新手先从简单路径练手Linux用GRUBrd.breakWindows用PE工具每个路径只练两遍第一遍跟着教程走第二遍尝试在出错时自己排查问题。另外要强调改了密码后如果用SSH连接虚拟机带宽和防火墙也要确认没问题。有次我改了CentOS的root密码本以为万事大吉结果宿主机连不上虚拟机查了半天发现是虚拟机的IP变了因为我之前在GRUB里动过引导参数跟密码压根没关系。所以密码改完后先确认虚拟机IP和网络状态再谈其他。最后说一个很小但很容易被忽略的细节在VMware里从GRUB编辑启动后虚拟机的时间可能异常因为跳过了一些初始化这会影响按时间戳记日志的应用。改完密码后最好在系统里重新同步一下时间timedatectl set-ntp true一条命令的事别让这个细节坑了后面的排查工作。结尾说句掏心窝子的话我在实际工作中重置过太多次虚拟机密码了从CentOS到Windows再到奇奇怪怪的中间件每次都提醒自己同一个原则没有快照不折腾没有备份不装高手。现在凡是拿到一台新虚拟机我的第一件事不是急着配环境而是先拍一张初始快照、记录好账号密码、确认SELinux和防火墙状态这三件事做完后面怎么折腾都不怕。再分享一个实用的小技巧如果虚拟机密码真的频繁忘可以给root账号配置SSH免密登录仅限于你的个人测试虚拟机等于给自己留了一把“备用钥匙”。这把钥匙藏好了下次再遇到密码丢失直接SSH进去一条命令重置比前端交互绕来绕去快得多。希望这篇偏实战的文章能帮你把“虚拟机密码重置”这个问题一次性解决。操作时保持耐心遇到问题就回头看快照虚拟机这东西的好处就在这容错率极高只要你没删文件就总有办法救回来。
返回列表