密碼忘了?Windows/Linux全平臺(tái)重置方法與避坑指南)
凌晨一點(diǎn)我對(duì)著VMware Workstation里那臺(tái)三個(gè)月沒開機(jī)的Windows Server虛擬機(jī)連續(xù)輸錯(cuò)了三次密碼。屏幕上彈出“賬戶已鎖定”的提示時(shí)我才后知后覺地意識(shí)到當(dāng)初搭建測(cè)試環(huán)境時(shí)隨手設(shè)的那串復(fù)雜密碼早就被我丟進(jìn)記憶的黑洞了。類似的事這些年經(jīng)歷過不少。給客戶演示前發(fā)現(xiàn)Linux虛擬機(jī)的root密碼不對(duì)、同事離職后留下一臺(tái)密碼未知的虛擬機(jī)、自己搭的實(shí)驗(yàn)環(huán)境隔了半年再啟動(dòng)……搞虛擬化時(shí)間長(zhǎng)了總會(huì)撞上“虛擬機(jī)密碼忘了”這種不算大但足夠讓人頭疼的事。這篇文章就把我這些年用過的虛擬機(jī)密碼重置方法系統(tǒng)梳理一遍覆蓋VMware Workstation和VirtualBox里最常見的Windows、Linux虛擬機(jī)順帶說清ESXi、Hyper-V、KVM等環(huán)境下的操作差異。老規(guī)矩先強(qiáng)調(diào)一下以下方法只適用于你本人有權(quán)限管理的虛擬機(jī)動(dòng)手之前最好確認(rèn)一下快照和備份情況避免重大數(shù)據(jù)損失。1. 密碼是怎么丟的先分清場(chǎng)景再動(dòng)手1.1 三種高頻丟密碼場(chǎng)景我復(fù)盤了手頭遇到的故障工單丟密碼基本逃不出下面三種情況。一是測(cè)試環(huán)境長(zhǎng)期擱置。建虛擬機(jī)的時(shí)候覺得“反正就測(cè)試用密碼隨便設(shè)一個(gè)”結(jié)果這個(gè)環(huán)境一放就是幾個(gè)月等再需要它的時(shí)候當(dāng)初的隨便設(shè)已經(jīng)變成了完全想不起來。我處理過最多的就是這種。二是交接不完整。同事離職、團(tuán)隊(duì)換人虛擬機(jī)目錄拷過來了賬號(hào)密碼卻沒同步到密碼本。更尷尬的是有些管理員建用戶時(shí)用的是自己的姓名縮寫加上一串紀(jì)念日除了他自己誰也猜不到。三是密碼策略聯(lián)動(dòng)把賬戶鎖死。比如公司域控要求定期改密虛擬機(jī)里的本地賬戶跟著設(shè)置了密碼過期一段時(shí)間沒登錄等你再連上去的時(shí)候密碼早就過了有效期或者有人用遠(yuǎn)程桌面連虛擬機(jī)時(shí)輸錯(cuò)次數(shù)太多賬戶被Windows鎖定策略直接禁用了。不管是哪種處理思路其實(shí)一致先判斷有沒有更省事的恢復(fù)路徑?jīng)]有的話再走離線重置。1.2 動(dòng)手之前必須確認(rèn)的三件事丟密碼的時(shí)候人容易慌一慌就想往grub、往WinRE里塞參數(shù)。但我的建議是花兩分鐘先確認(rèn)三件事這三件事沒搞清楚就動(dòng)手很容易白忙活半小時(shí)甚至把系統(tǒng)搞到進(jìn)不去。第一件事看看有沒有快照。VMware Workstation里點(diǎn)“虛擬機(jī)”菜單下的“快照”打開“快照管理器”能看到這臺(tái)虛擬機(jī)存在哪些時(shí)間點(diǎn)的快照。如果某個(gè)快照的創(chuàng)建時(shí)間點(diǎn)是在你“還記得密碼”的那段時(shí)間直接回滾到那個(gè)快照是最快的重置方案。代價(jià)是快照之后新增的數(shù)據(jù)和系統(tǒng)改動(dòng)全都會(huì)丟所以只適合測(cè)試環(huán)境或不重要的演示虛擬機(jī)。VirtualBox也有類似的快照功能操作邏輯一樣。第二件事磁盤有沒有加密。虛擬機(jī)里的Windows如果開了BitLocker或者Linux的根分區(qū)用了LUKS加密那么后面將要介紹的幾乎所有“離線修改”手段都會(huì)失效。原因很簡(jiǎn)單這類工具需要直接讀寫磁盤里的SAM數(shù)據(jù)庫或shadow文件磁盤本身是被加密的繞不進(jìn)去。遇到加密盤你先要找BitLocker恢復(fù)密鑰或者LUKS密碼否則任何離線重置都是空談。第三件事虛擬機(jī)是不是掛起狀態(tài)。掛起Suspend狀態(tài)下的虛擬機(jī)在恢復(fù)的時(shí)候會(huì)跳過BIOS引導(dǎo)直接把你帶回關(guān)機(jī)前的內(nèi)存現(xiàn)場(chǎng)。此時(shí)你切換了啟動(dòng)順序、掛載了安裝ISO都可能不生效因?yàn)樗緵]走引導(dǎo)流程。正確做法是先把它正常關(guān)機(jī)或者在“虛擬機(jī)-電源”里選擇“關(guān)閉客戶機(jī)”如果實(shí)在關(guān)不掉且不需要保留現(xiàn)場(chǎng)數(shù)據(jù)就選“放棄掛起狀態(tài)”??傊屘摂M機(jī)進(jìn)入徹底斷電的關(guān)機(jī)狀態(tài)后續(xù)操作才有意義。這三件事確認(rèn)完基本就能判斷出該走哪條路了。接下來我們進(jìn)入主流平臺(tái)的實(shí)操環(huán)節(jié)。2. VMware Workstation里重置Windows虛擬機(jī)密碼三條實(shí)測(cè)路線2.1 為什么會(huì)想到替換utilman.exeWindows登錄界面右下角有一個(gè)“輕松使用”按鈕點(diǎn)擊后會(huì)彈出放大鏡、屏幕鍵盤這些輔助工具真正后臺(tái)運(yùn)行的程序是C:\Windows\System32\utilman.exe。同理連按五次Shift會(huì)觸發(fā)粘滯鍵對(duì)應(yīng)的是sethc.exe。這兩個(gè)程序都是系統(tǒng)級(jí)權(quán)限運(yùn)行的而它們所在的位置恰好是我們可以修改的。思路非常簡(jiǎn)單粗暴用命令提示符cmd.exe去替換掉utilman.exe重啟之后在登錄界面點(diǎn)一下“輕松使用”彈出來的不是輔助工具而是一個(gè)擁有SYSTEM權(quán)限的命令行窗口。有了這個(gè)命令行直接用net user命令重置密碼整個(gè)過程幾分鐘搞定。這也是我目前最推薦Windows虛擬機(jī)密碼重置方案的原因——不依賴第三方工具、不需要額外的PE鏡像只要手上有一個(gè)Windows安裝ISO就夠了。2.2 安裝ISO掛載和utilman替換完整步驟下面這套步驟我在VMware Workstation 12到17上都驗(yàn)證過Windows 7到Windows Server 2022基本通用。第一步把Windows安裝ISO掛到虛擬機(jī)的光驅(qū)上。打開“虛擬機(jī)設(shè)置”找到CD/DVD那一項(xiàng)選擇“使用ISO映像文件”把安裝鏡像填進(jìn)去同時(shí)勾選“啟動(dòng)時(shí)連接”。第二步確認(rèn)虛擬機(jī)是關(guān)機(jī)狀態(tài)。這一步經(jīng)常有人忽略——虛擬機(jī)如果是掛起狀態(tài)ISO雖然掛上了但開機(jī)時(shí)根本不會(huì)從光驅(qū)引導(dǎo)。第三步開機(jī)的時(shí)候快速按F2進(jìn)入BIOS設(shè)置把CD-ROM drive調(diào)整到硬盤前面。如果你手速不夠快可以在關(guān)機(jī)狀態(tài)下找到虛擬機(jī)的.vmx文件用記事本打開加一行參數(shù)bios.bootDelay 5000這個(gè)參數(shù)的意思是開機(jī)后延遲5秒再引導(dǎo)給自己留出按F2的時(shí)間。改完記得保存再啟動(dòng)虛擬機(jī)。第四步從ISO引導(dǎo)后進(jìn)入Windows安裝界面。在“現(xiàn)在安裝”那個(gè)藍(lán)色界面里按Shift F10可以直接打開命令提示符也可以點(diǎn)“修復(fù)計(jì)算機(jī)”-“疑難解答”-“命令提示符”殊途同歸。第五步在命令提示符里找到系統(tǒng)所在盤符。這里有個(gè)新手容易踩的坑用安裝介質(zhì)引導(dǎo)后原來的C盤可能不再顯示為C盤它會(huì)因?yàn)楸P符分配規(guī)則變成D盤甚至E盤。保險(xiǎn)起見先執(zhí)行wmic logicaldisk get name看到所有盤符之后挨個(gè)用dir看一眼是不是系統(tǒng)盤判斷標(biāo)準(zhǔn)是根目錄下有沒有Windows、Users、Program Files這幾個(gè)文件夾。第六步確認(rèn)系統(tǒng)盤后依次執(zhí)行命令。假設(shè)系統(tǒng)盤是D盤D: cd \Windows\System32 ren utilman.exe utilman.exe.bak copy cmd.exe utilman.exe把原來的utilman改名備份再把cmd復(fù)制成utilman。這一步執(zhí)行完關(guān)掉命令提示符直接從光驅(qū)彈出ISO。做法是在虛擬機(jī)設(shè)置里取消掛載ISO或者直接關(guān)機(jī)再修改設(shè)置。第七步開機(jī)正常引導(dǎo)到登錄界面點(diǎn)擊右下角的“輕松使用”圖標(biāo)。這時(shí)候彈出來的就是一個(gè)cmd窗口驗(yàn)證一下當(dāng)前用戶net user然后重置密碼net user Administrator 你的新密碼如果管理員賬戶是被策略禁用的需要先激活net user Administrator /active:yes第八步重啟登錄進(jìn)去之后記得把文件還原不然以后每次點(diǎn)“輕松使用”都會(huì)彈出一個(gè)命令行看起來像系統(tǒng)中毒一樣cd \Windows\System32 del utilman.exe ren utilman.exe.bak utilman.exe提示新密碼如果太簡(jiǎn)單net user會(huì)提示密碼不符合策略要求。不想折騰復(fù)雜度的話可以臨時(shí)設(shè)一個(gè)包含大小寫字母、數(shù)字和符號(hào)的強(qiáng)密碼登錄后再改成順手的即可。2.3 備選方案PE盤加NTPWEdit離線操作SAM如果手頭恰好有Windows PE啟動(dòng)盤微PE、優(yōu)啟通這類都行也可以走NTPWEdit路線。NTPWEdit是一個(gè)離線修改Windows SAM數(shù)據(jù)庫的小工具不需要替換任何系統(tǒng)文件對(duì)于追求最小干預(yù)的人來說更穩(wěn)妥。操作流程是把PE的ISO掛載到虛擬機(jī)光驅(qū)開機(jī)從光驅(qū)引導(dǎo)進(jìn)入PE桌面運(yùn)行NTPWEdit點(diǎn)擊“打開”選擇系統(tǒng)中的C:\Windows\System32\config\SAM文件。工具會(huì)列出所有本地賬戶選中你要重置密碼的用戶點(diǎn)“清除密碼”或者“修改密碼”最后保存退出重啟虛擬機(jī)。優(yōu)缺點(diǎn)是明顯的。好處是不改動(dòng)utilman這類系統(tǒng)文件不會(huì)出現(xiàn)忘記還原導(dǎo)致后患的情況壞處是得自己準(zhǔn)備PE鏡像而且PE里內(nèi)置工具五花八門下載時(shí)最好認(rèn)準(zhǔn)靠譜來源。2.4 運(yùn)氣最好的一種快照回滾如果這臺(tái)虛擬機(jī)在密碼還沒丟的時(shí)候打過快照那么回滾快照就是最省事的方式。在“快照管理器”里選中那個(gè)時(shí)間點(diǎn)點(diǎn)“轉(zhuǎn)到”然后確認(rèn)。幾分鐘后虛擬機(jī)就回到密碼已知的狀態(tài)了。代價(jià)是回滾之后的改動(dòng)全部丟失。所以我一直有個(gè)習(xí)慣重要的Windows虛擬機(jī)改完密碼或者做完系統(tǒng)更新立刻打一個(gè)快照命名成“密碼已更新-日期”這種格式。這個(gè)習(xí)慣幫我省了太多事后面也會(huì)專門展開說。3. Linux虛擬機(jī)密碼重置grub參數(shù)是最短路徑3.1 老發(fā)行版百試百靈的init/bin/bashLinux虛擬機(jī)的密碼重置思路和Windows完全不同不需要額外介質(zhì)直接利用引導(dǎo)加載器動(dòng)手就行。最早期的做法是在grub引導(dǎo)菜單里給內(nèi)核傳一個(gè)init/bin/bash參數(shù)讓內(nèi)核跳過所有服務(wù)直接啟動(dòng)到bash。以CentOS 6、Ubuntu 14這類老系統(tǒng)為例重啟虛擬機(jī)在grub菜單界面選中最上面的內(nèi)核行按e進(jìn)入編輯模式找到以linux或者linux16開頭的那一行在末尾追加一段init/bin/bash按Ctrl X或者F10啟動(dòng)。系統(tǒng)會(huì)跳過登錄直接進(jìn)入bash提示符執(zhí)行掛載讀寫操作。這一步不能省因?yàn)檫M(jìn)到這里根文件系統(tǒng)通常還是只讀狀態(tài)直接改密碼會(huì)報(bào)錯(cuò)mount -o remount,rw /修改密碼passwd root如果忘的是普通用戶的密碼也可以在這里直接改passwd 用戶名重啟虛擬機(jī)正常引導(dǎo)登錄。這個(gè)方案簡(jiǎn)單清晰但有兩個(gè)問題。一是init/bin/bash啟動(dòng)時(shí)執(zhí)行腳本的順序和正常啟動(dòng)不同在某些精簡(jiǎn)系統(tǒng)上可能連網(wǎng)絡(luò)都不起來不過我們只是改本地密碼不需要網(wǎng)絡(luò)。二是部分帶SELinux的RHEL系系統(tǒng)在init/bin/bash之后會(huì)因?yàn)榘踩舷挛膯栴}導(dǎo)致系統(tǒng)閃退或登錄異常所以新版RHEL我一般推薦下面這個(gè)rd.break方案。3.2 systemd時(shí)代的標(biāo)準(zhǔn)答案rd.breakCentOS/RHEL 7及以后的版本包括大量基于它二次開發(fā)的分支系統(tǒng)官方推薦的重置密碼路徑是rd.break。這個(gè)參數(shù)的作用是在initramfs階段停下來給管理員一個(gè)shell此時(shí)真實(shí)根目錄被掛載在/sysroot下還沒有進(jìn)入我們熟悉的systemd初始化流程。操作步驟重啟虛擬機(jī)在grub菜單按e編輯找到以linux16或linux開頭的那一行在行尾追加rd.break按Ctrl X啟動(dòng)會(huì)進(jìn)入一個(gè)switch_root提示符界面把真實(shí)根目錄重新掛載為可讀寫mount -o remount,rw /sysroot切換進(jìn)真實(shí)根目錄chroot /sysroot修改密碼passwd root如果系統(tǒng)啟用了SELinux建議執(zhí)行下面這條重新生成安全上下文否則重啟后可能出現(xiàn)無法登錄的情況touch /.autorelabel退出chroot并重啟exit reboot這個(gè)方案看似比init/bin/bash多兩步但兼容性最好。RHEL 7/8/9、CentOS 7/8/9、Rocky Linux、AlmaLinux我都實(shí)測(cè)過走rd.break基本不會(huì)出岔子。3.3 Ubuntu桌面版和服務(wù)器版的區(qū)別Ubuntu系的做法略有不同。Ubuntu 18.04及以后的版本在grub編輯界面找到linux開頭的那一行把其中ro quiet splash改成rw quiet splash init/bin/bash注意前面多了個(gè)rw意思是內(nèi)核直接以讀寫方式掛載根文件系統(tǒng)進(jìn)入bash后不需要再執(zhí)行mount -o remount,rw /。然后按Ctrl X啟動(dòng)直接就能看到root shell執(zhí)行passwd修改密碼即可。另外Ubuntu桌面版還有個(gè)更方便的入口。開機(jī)在grub菜單中選擇“Advanced options for Ubuntu”-“recovery mode”然后在恢復(fù)菜單里選“root”會(huì)掉到一個(gè)維護(hù)模式Shell。這個(gè)模式根分區(qū)默認(rèn)是只讀掛載同樣需要先mount -o remount,rw /再執(zhí)行passwd。我個(gè)人的習(xí)慣是手頭如果是Ubuntu優(yōu)先試rw init/bin/bash的組合一次不行再進(jìn)recovery mode通常很快。3.4 麒麟系統(tǒng)也是這個(gè)套路熱搜詞里有“麒麟系統(tǒng)重置密碼”這里多說幾句。麒麟系統(tǒng)的桌面版和服務(wù)器版本質(zhì)上都是Linux的發(fā)行版服務(wù)器版跟RHEL系非常接近所以密碼重置方式沿用rd.break或者init/bin/bash都可以。銀河麒麟服務(wù)器版跟CentOS 7的grub菜單結(jié)構(gòu)幾乎一樣按e找到linux行追加rd.break然后按上面3.2節(jié)的步驟走就行。一個(gè)細(xì)節(jié)如果跑在飛騰、鯤鵬這類ARM架構(gòu)的物理機(jī)或虛擬機(jī)上啟動(dòng)流程走的是UEFIgrub菜單的顯示方式可能有點(diǎn)差異。有些機(jī)器開機(jī)時(shí)需要按Esc或多次按Shift才能呼出引導(dǎo)菜單和grub界面不像x86平臺(tái)那樣直接可見。處理方法是在虛擬機(jī)里留意開機(jī)時(shí)的提示或者在虛擬機(jī)BIOS設(shè)置里把啟動(dòng)等待時(shí)間調(diào)長(zhǎng)一點(diǎn)。3.5 順帶一提macOS虛擬機(jī)的密碼重置如果用的是VMware Fusion或者UTM跑的macOS虛擬機(jī)密碼忘了也有招。將虛擬機(jī)關(guān)機(jī)后再開機(jī)啟動(dòng)過程中按住Command R進(jìn)入恢復(fù)模式然后打開“終端”執(zhí)行resetpassword就能進(jìn)入重置密碼界面。Apple Silicon平臺(tái)上恢復(fù)模式的進(jìn)入方式略有不同虛擬機(jī)環(huán)境里可能需要先關(guān)閉SIP才能操作。因?yàn)橛胢acOS虛擬機(jī)的朋友相對(duì)少這里不展開細(xì)說。4. VirtualBox、ESXi、Hyper-V和KVM下的操作差異4.1 VirtualBox按鍵和掛載點(diǎn)不一樣VirtualBox里的Windows密碼重置邏輯和VMware完全一樣區(qū)別只在入口操作上。VirtualBox默認(rèn)的啟動(dòng)快捷鍵是開機(jī)時(shí)按F12呼出啟動(dòng)菜單選擇光驅(qū)按F2進(jìn)入固件設(shè)置。如果發(fā)現(xiàn)虛擬機(jī)直接進(jìn)系統(tǒng)不給你按鍵的機(jī)會(huì)可以在“設(shè)置-系統(tǒng)-主板”里勾選“啟用EFI”或調(diào)整“啟動(dòng)順序”也可以把光驅(qū)移動(dòng)到硬盤前面。Linux虛擬機(jī)的grub編輯方式跟前面完全相同。唯一要留意的是VirtualBox的窗口焦點(diǎn)問題——按鍵要能被虛擬機(jī)和虛擬機(jī)里的grub捕獲鼠標(biāo)得先點(diǎn)進(jìn)虛擬機(jī)窗口內(nèi)部否則按了半天沒反應(yīng)你急grub也急。4.2 ESXi環(huán)境在vSphere Client里掛ISOESXi虛擬機(jī)雖然跑在物理宿主機(jī)上但密碼重置的本質(zhì)沒變。在vSphere Web Client里找到目標(biāo)虛擬機(jī)右鍵“編輯設(shè)置”掛載一個(gè)Windows安裝ISO或者PE鏡像到CD/DVD驅(qū)動(dòng)器然后在“虛擬機(jī)選項(xiàng)”里找到“引導(dǎo)選項(xiàng)”勾選“下次引導(dǎo)時(shí)強(qiáng)制進(jìn)入BIOS設(shè)置”。這樣虛擬機(jī)強(qiáng)制重啟的時(shí)候會(huì)先進(jìn)入BIOS你就可以把光驅(qū)設(shè)為首選引導(dǎo)項(xiàng)了。ESXi下Linux虛擬機(jī)的grub操作跟Workstation一模一樣畢竟虛擬硬件層面大同小異。主要區(qū)別是vSphere里沒有“掛起狀態(tài)”這個(gè)概念對(duì)應(yīng)的問題如果虛擬機(jī)當(dāng)前是掛起狀態(tài)改成強(qiáng)制進(jìn)入BIOS后開機(jī)時(shí)依然會(huì)直接恢復(fù)現(xiàn)場(chǎng)所以也得先讓虛擬機(jī)徹底關(guān)機(jī)。4.3 Hyper-V注意安全啟動(dòng)那一項(xiàng)Hyper-V掛載ISO的位置在“設(shè)置-SCSI控制器-添加DVD驅(qū)動(dòng)器”選好鏡像后再進(jìn)入“固件”調(diào)整啟動(dòng)順序把光驅(qū)挪到硬盤前面。這里有個(gè)比較坑的細(xì)節(jié)默認(rèn)情況下Hyper-V給第二代虛擬機(jī)Gen 2開啟的是UEFI引導(dǎo)并且勾選了“安全啟動(dòng)”。如果掛載的PE鏡像或某些Linux發(fā)行版ISO沒有有效的安全啟動(dòng)簽名虛擬機(jī)可能無法從光驅(qū)引導(dǎo)。解決方法是在“設(shè)置-安全”里臨時(shí)關(guān)閉“安全啟動(dòng)”把密碼重置完再改回來。4.4 KVM和Proxmoxvirsh edit也能救急KVM系的虛擬化平臺(tái)包括Proxmox VE操作方式跟前面幾個(gè)平臺(tái)大差不差。用virt-manager打開虛擬機(jī)詳情在“添加硬件”里選“存儲(chǔ)設(shè)備”設(shè)備類型選“CDROM設(shè)備”把下載好的ISO掛上去然后在“引導(dǎo)順序”里把光驅(qū)拖到最前面。如果是純命令行環(huán)境可以用virsh edit 虛擬機(jī)名在os配置段里調(diào)整boot devcdrom/的優(yōu)先級(jí)。KVM下Linux虛擬機(jī)內(nèi)核參數(shù)的修改還是走grub編輯跟前面幾節(jié)沒有區(qū)別。這里想提醒的是KVM平臺(tái)上Windows虛擬機(jī)的utilman替換同樣受BitLocker限制如果客戶機(jī)開了加密卷離線改SAM依然是死路一條。我把這些平臺(tái)的差異匯總成一張表方便對(duì)照平臺(tái)掛載ISO的主要入口進(jìn)入固件/啟動(dòng)菜單方式備注VMware Workstation虛擬機(jī)設(shè)置-光驅(qū)開機(jī)按F2可加bios.bootDelay最簡(jiǎn)單教程最多VirtualBox設(shè)置-存儲(chǔ)-光驅(qū)F12啟動(dòng)菜單F2進(jìn)固件注意窗口焦點(diǎn)ESXi / vCenter編輯設(shè)置-掛載CD/DVD引導(dǎo)選項(xiàng)-強(qiáng)制進(jìn)入BIOS虛擬機(jī)需徹底關(guān)機(jī)Hyper-V設(shè)置-SCSI控制器-DVD固件調(diào)整啟動(dòng)順序Gen 2需臨時(shí)關(guān)安全啟動(dòng)KVM / Proxmoxvirt-manager添加CDROM引導(dǎo)順序調(diào)整或virsh edit命令行也能完成5. 實(shí)測(cè)中最容易翻車的幾個(gè)環(huán)節(jié)5.1 掛起狀態(tài)、快照鏈和虛擬磁盤依賴前面已經(jīng)提過掛起狀態(tài)的問題但這里還要再說一次因?yàn)榇_實(shí)很多人折在這一步。虛擬機(jī)是掛起狀態(tài)時(shí)你掛ISO、改啟動(dòng)順序、加grub參數(shù)統(tǒng)統(tǒng)可能不生效。正確操作是在VMware Workstation里右鍵虛擬機(jī)-電源-“放棄掛起狀態(tài)”或者確保它徹底關(guān)機(jī)。放棄掛起狀態(tài)會(huì)丟內(nèi)存里的未保存數(shù)據(jù)但對(duì)測(cè)試環(huán)境來說通常無所謂??煺真湹膯栴}也值得留意。如果一臺(tái)虛擬機(jī)有多級(jí)快照回滾到舊快照意味著放棄之后所有的磁盤改動(dòng)這個(gè)操作不可逆。除非確定當(dāng)前密碼錯(cuò)誤的狀態(tài)不涉及重要數(shù)據(jù)否則別輕易回滾。另外當(dāng)你把原虛擬機(jī)的vmdk添加到另一臺(tái)虛擬機(jī)進(jìn)行修復(fù)時(shí)要確保原虛擬機(jī)處于關(guān)機(jī)狀態(tài)否則磁盤文件可能被鎖定添加時(shí)會(huì)報(bào)“文件正在使用”的錯(cuò)誤。這個(gè)我在急救的時(shí)候也踩過后來養(yǎng)成了先關(guān)機(jī)再掛從盤的習(xí)慣。5.2 磁盤加密會(huì)讓所有離線方案失效BitLocker是Windows離線重置的攔路虎。如果你在虛擬機(jī)里啟用過BitLocker那么從WinRE里訪問系統(tǒng)盤時(shí)會(huì)發(fā)現(xiàn)盤符根本讀不出來或者執(zhí)行文件替換時(shí)報(bào)“拒絕訪問”。這是因?yàn)锽itLocker保護(hù)下的系統(tǒng)分區(qū)沒有解鎖密鑰就無法讀取。解決路徑只有一條先找到BitLocker恢復(fù)密鑰在恢復(fù)界面里解鎖再繼續(xù)重置操作。如果密鑰也沒了那就不是改密碼的問題而是數(shù)據(jù)恢復(fù)的問題了。Linux的LUKS加密同理。rd.break也好init/bin/bash也罷都發(fā)生在解密之前面對(duì)一個(gè)加密的根分區(qū)你沒有設(shè)備映射路徑可用。所以再次強(qiáng)調(diào)動(dòng)手之前先確認(rèn)加密狀態(tài)。5.3 鍵盤映射和啟動(dòng)超時(shí)會(huì)讓你懷疑人生一些朋友在虛擬機(jī)里操作grub時(shí)常常遇到兩個(gè)“玄學(xué)”問題。第一個(gè)是按鍵沒反應(yīng)。明明按了Shift想呼出grub菜單菜單沒出來系統(tǒng)直接進(jìn)了。解決辦法是在VMware Workstation里按住Shift的同時(shí)快速點(diǎn)擊虛擬機(jī)窗口內(nèi)部讓按鍵焦點(diǎn)進(jìn)入虛擬機(jī)。Windows引導(dǎo)時(shí)還有個(gè)好用的招在grub菜單出現(xiàn)之前反復(fù)按Esc能強(qiáng)制顯示引導(dǎo)菜單。很多UEFI引導(dǎo)的虛擬機(jī)里Esc比Shift好用得多。第二個(gè)是grub倒計(jì)時(shí)太短。有些系統(tǒng)把grub超時(shí)時(shí)間設(shè)成了0或1秒你根本來不及按e。處理方法是在虛擬機(jī)開機(jī)時(shí)反復(fù)按Esc或Shift讓grub停下或者提前在系統(tǒng)里修改grub配置把超時(shí)時(shí)間改長(zhǎng)。對(duì)于密碼已經(jīng)忘掉的虛擬機(jī)這個(gè)方法只適用于還能進(jìn)系統(tǒng)的情況所以還是建議平時(shí)就把GRUB_TIMEOUT設(shè)置成5秒以上。5.4 替換文件后系統(tǒng)啟動(dòng)異常的自救手段萬一utilman替換出問題比如手滑把cmd.exe復(fù)制錯(cuò)位置、刪了不該刪的文件導(dǎo)致Windows啟動(dòng)異常還有一條兜底的自救路徑把出問題的vmdk磁盤掛到另一臺(tái)正常可用的Windows虛擬機(jī)上作為從盤。操作步驟是關(guān)閉出問題的虛擬機(jī)打開另一臺(tái)正常的Windows虛擬機(jī)在虛擬機(jī)設(shè)置里添加一塊現(xiàn)有磁盤選擇出問題機(jī)器的vmdk文件啟動(dòng)正常虛擬機(jī)。此時(shí)從盤會(huì)自動(dòng)分配盤符你可以進(jìn)到\Windows\System32目錄把utilman文件恢復(fù)原狀然后移除這塊從盤再啟動(dòng)原虛擬機(jī)。這個(gè)方法本質(zhì)上就是虛擬機(jī)版的“拆硬盤到別的機(jī)器上救數(shù)據(jù)”非常實(shí)用建議收藏。Linux虛擬機(jī)如果grub改壞了也可以用同樣的思路把vmdk掛到另一臺(tái)Linux虛擬機(jī)上進(jìn)入系統(tǒng)后掛載對(duì)應(yīng)分區(qū)把grub配置改回來或者直接chroot進(jìn)去重新生成initramfs。6. 密碼重置之后的收尾與防忘機(jī)制6.1 重置成功后的三件事密碼重置成功只算完成了一半后面這三件事我每次都會(huì)做缺一不可。第一件事立即打一個(gè)新快照命名為類似“密碼已重置-日期”的格式。這樣做的好處是如果以后又忘了密碼直接回滾到這個(gè)已知密碼的基線狀態(tài)省掉再次折騰的功夫。對(duì)測(cè)試環(huán)境的虛擬機(jī)來說這個(gè)習(xí)慣等于給密碼上了一道保險(xiǎn)。第二件事還原所有臨時(shí)改動(dòng)。Windows的utilman.exe是否恢復(fù)、虛擬機(jī)的啟動(dòng)順序是否改回硬盤優(yōu)先、掛載的安裝ISO是否已經(jīng)移除、Hyper-V的安全啟動(dòng)是否重新打開這些全部檢查一遍。我見過有人用完utilman替換法之后忘記還原文件結(jié)果三個(gè)月后同事點(diǎn)“輕松使用”彈出一個(gè)cmd窗口還以為虛擬機(jī)被人入侵了。第三件事把新密碼記錄到密碼管理工具里。團(tuán)隊(duì)環(huán)境可以統(tǒng)一用KeePassXC或者Bitwarden這類工具個(gè)人環(huán)境哪怕記到Excel里也比不記強(qiáng)。密碼本身的價(jià)值就在于“只有自己知道”但前提是自己也得能找回來。6.2 應(yīng)用系統(tǒng)密碼重置和虛擬機(jī)系統(tǒng)密碼重置要分開排查需求的時(shí)候發(fā)現(xiàn)好多人是被應(yīng)用軟件“逼”到重置虛擬機(jī)密碼的這里單獨(dú)提醒一句如果你的目標(biāo)是恢復(fù)Artifactory、Elasticsearch這類自帶用戶體系的應(yīng)用后臺(tái)密碼別直接把虛擬機(jī)系統(tǒng)密碼改掉。這類軟件的登錄憑據(jù)通常有自己獨(dú)立的存儲(chǔ)和加密機(jī)制改完系統(tǒng)密碼并不會(huì)同步修改應(yīng)用里的認(rèn)證數(shù)據(jù)反而可能因?yàn)橄到y(tǒng)層面的賬戶狀態(tài)變動(dòng)讓應(yīng)用的服務(wù)進(jìn)程啟動(dòng)異常。正確做法是查應(yīng)用自身的密碼重置機(jī)制。比如Elasticsearch 7.x配置了安全特性后可以用bin/elasticsearch-users userpasswd 用戶名按提示輸入新密碼。Artifactory也有自己的管理員恢復(fù)入口官方文檔里有專門的“Forgot admin password”流程。這些應(yīng)用級(jí)密碼重置操作本質(zhì)上和虛擬機(jī)層面無關(guān)你在物理服務(wù)器上一樣要這么處理。6.3 團(tuán)隊(duì)環(huán)境下的虛擬機(jī)密碼防忘管理最后分享一點(diǎn)團(tuán)隊(duì)協(xié)作的經(jīng)驗(yàn)。我建議每一個(gè)長(zhǎng)期維護(hù)的虛擬機(jī)都要在登記清單里記錄以下字段虛擬機(jī)名稱和用途操作系統(tǒng)和版本內(nèi)網(wǎng)IP地址登錄賬號(hào)和密碼最近一次變密時(shí)間快照數(shù)量及最近快照時(shí)間負(fù)責(zé)人和備注這個(gè)清單可以放在公司內(nèi)部的Wiki、飛書文檔或者共享表格里有權(quán)限的人都能看到。每次改完密碼、打完快照都順手更新一下。還有一個(gè)挺實(shí)用的小技巧給重要虛擬機(jī)設(shè)置周期性登錄提醒。比如每月第一周手動(dòng)登錄一次輸入一遍密碼。這個(gè)操作花不了半分鐘但它能保證你永遠(yuǎn)跟自己的虛擬機(jī)保持在“認(rèn)識(shí)”狀態(tài)而不是等到要用的那一天才發(fā)現(xiàn)密碼早已生疏。做了這么多年虛擬化運(yùn)維我最大的體會(huì)是密碼這種東西寧可多花兩分鐘寫進(jìn)密碼本也別在凌晨三點(diǎn)對(duì)著鎖死的虛擬機(jī)后悔。虛擬機(jī)的好處是容錯(cuò)率高有不計(jì)其數(shù)的辦法可以恢復(fù)但每次恢復(fù)都要付出時(shí)間成本和數(shù)據(jù)風(fēng)險(xiǎn)。如果你現(xiàn)在剛好也有一臺(tái)密碼懸在腦后的虛擬機(jī)不妨趁這篇教程還在手邊先確認(rèn)一下快照、加密和掛起狀態(tài)然后挑最適合的路子動(dòng)手解決。搞定之后記得打個(gè)快照把密碼記下來然后踏實(shí)睡覺。