如何在 ESXi 7.x 和 ESXi 8.x 中恢复忘记的 root 密码
如果您忘记了 ESXi 的 root 密码,VMware 建议您重新安装 ESXi。在没有自动部署和集中式配置文件的小型环境中,您需要手动配置所有内容。或者,您可以使用非官方方法重置密码。如果您通过 vCenter 管理 ESXi,则可以使用 vCenter 中的特权帐户重置密码。此外,将 ESXi 主机加入 AD 域也会有很大帮助。如果这些选项都不可用,则无法重置独立主机的密码,因为系统将密码哈希值存储在加密的配置文件中,没有 root 权限无法解密。因此,在 ESXi 6.x 之后,从 Linux 启动主机并直接编辑配置文件的旧方法不再有效。.
使用虚拟主机的替代方案
此方法涉及设置第二个(虚拟)主机,并将密钥从主主机传输到该主机。这样,您就可以提取配置并更改 SQLite 数据库中的密码哈希值。为此,您需要将物理主机和虚拟主机的启动介质都挂载到外部,因为系统运行时无法覆盖配置文件,并且系统会在下次启动时拒绝这些更改。Linux 系统适合访问 ESXi 配置;使用 Live CD 是最简便的方法。.
安装虚拟 ESXi
要编辑物理主机的 ESXi 配置,您需要另一台版本完全相同的 ESXi 主机,并且您没有忘记该主机的密码。.
创建一个新的虚拟机,选择“其他”作为客户操作系统,然后选择要安装的 ESXi 版本。.
然后转到“自定义设置”页面,在“虚拟硬件 => CPU”部分,启用“向客户操作系统公开硬件辅助虚拟化”选项。.
最后,将 ESXi 安装 ISO 文件挂载为 DVD 驱动器,并启用“开机时连接”选项。您必须先通过“存储”=>“数据存储浏览器”=>“上传”将此文件上传到 ESXi 主机。.
正在备份 state.tgz
下一步是备份物理主机上的 state.tgz 文件。该文件存储主机在下次启动时恢复其状态所需的持久配置数据。.
此文件包含遗忘密码的哈希值以及用于加密其中 local.tgz 文件的密钥。.
如果您是从 USB 启动主机(VMware 不推荐这样做),请断开 USB 连接并将其连接到 Windows 计算机。如果主机是从内部磁盘启动,请通过外部驱动器启动到 Linux 环境,并将格式化为 FAT 的第 6 分区挂载到 /mnt,例如:
挂载 /dev/sdb6 /mnt
然后是文件 /mnt/bootbank/state.tgz 使用标准的 Linux 工具(例如)将文件写入本地磁盘(如果可写)或网络驱动器。 SCP-1811 或者 FTP 复制。建议您也备份此文件。.
将 state.tgz 复制到虚拟 ESXi
接下来,将备份文件复制到该目录。 /tmp 例如,迁移虚拟 ESXi 主机,使用 SCP-1811. 如果文件位于 Windows 计算机上,则命令可能如下所示:
scp "C:\temp\state.tgz" [email protected]:/tmp/state.tgzسپس به دایرکتوری /tmp در هاست هدف بروید و فایل state.tgz را استخراج کنید:
tar -zxvf state.tgzوارد کردن کلید به state.tgz در ESXi مجازی
در مرحله بعد، فایل state.tgz مربوط به هاست مجازی را کپی، رمزگشایی و ویرایش میکنید تا کلید هاست فیزیکی را در آن جای دهید. برای این کار دستورات زیر را در shell هاست مجازی وارد کنید:
cp /bootbank/state.tgz /tmp/state.tgz
cd /tmp
tar -xzf state.tgz
rm state.tgz
vmtar -x local.tgz -o local.tar
tar -xf local.tar
rm local.tar
cp /tmp/encryption.info etc/vmware/
vmtar -c local.tar etc/vmware -o local.tgz
mv local.tgz state-mod.tgzاین دستورات فایل state.tgz رمزگذاری شده هاست مجازی را استخراج، رمزگشایی و بسته تنظیمات محلی (local.tgz) اصلاحشده ایجاد میکنند.

ویرایش فایل پیکربندی در هاست هدف
بعد، فایل /tmp/state-mod.tgz را به کامپیوتر خود کپی کنید:
scp [email protected]:/tmp/state-mod.tgz "C:\temp\state-mod.tgz"سپس هاست مجازی را خاموش کنید تا بتوانید درایو VMDK آن را آزاد کنید.
مونت کردن VMDK هاست هدف در یک VM لینوکس
اکنون فایل VMDK این VM را به یک VM لینوکس متصل کنید و آن را روشن کنید. در ترمینال سیستم مهمان دستور
fdisk -lباید دو پارتیشن bootbank شماره 5 و 6 را نمایش دهد.

انتقال state-mod.tgz به VM لینوکس و جایگزینی state.tgz
برای انتقال فایل state-mod.tgz که قبلاً ساختید، از کامپیوتر ویندوز (مسیر C:\temp) به ماشین لینوکس (دایرکتوری /home/thomas) با آدرس IP 10.0.7.140، میتوانید از دستور زیر در ترمینال یا پاورشل ویندوز استفاده کنید:
توضیحات:
scpابزار امن کپی فایل بین سیستمها است.[email protected]یعنی نام کاربریthomasروی ماشین لینوکس با آدرس IP مذکور./home/thomas/state-mod.tgzمسیر مقصد فایل در لینوکس است.
بعد از اجرای این دستور، سیستم از شما پسورد کاربر thomas را میپرسد و پس از وارد کردن آن، انتقال فایل آغاز میشود.
اگر در ویندوز از ترمینال معمولی استفاده میکنید و دستور scp شناسایی نمیشود، باید OpenSSH Client را نصب یا از ابزارهایی مانند PuTTY (pscp) استفاده کنید.
اگر خواستید میتوانم راهنمای استفاده از این ابزارها هم برایتان بنویسم.
scp "C:\temp\state-mod.tgz" [email protected]:/home/thomas/state-mod.tgzسپس پارتیشنهای bootbank را مانت کرده و فایل state.tgz را با state-mod.tgz جایگزین کنید:
sudo su
mkdir -p /bootbank1
mkdir -p /bootbank2
mount /dev/sdc5 /bootbank1
mount /dev/sdc6 /bootbank2
cp /home/thomas/state-mod.tgz /bootbank1/state.tgz
cp /home/thomas/state-mod.tgz /bootbank2/state.tgz
umount /bootbank1
umount /bootbank2سپس فایل VMDK را از VM لینوکس جدا کرده و هاست مجازی را دوباره راهاندازی کنید. حالا پیکربندی با کلید رمزگشایی شده هاست فیزیکی بارگذاری میشود.
در این مرحله، فایل state.tgz هاست فیزیکی که قبلاً کپی کردهاید را به دایرکتوری /tmp هاست مجازی منتقل کنید.
سپس فایل local.tgz.ve داخل آن را رمزگشایی کنید:
cd /tmp
cp /bootbank/state.tgz ./
tar -xzf state.tgz
rm state.tgz
vmtar -x local.tgz.ve -o local.tgzجایگزینی هش پسورد در پایگاه داده پیکربندی ESXi
اکنون کار اصلی یعنی جایگزینی هش پسورد را انجام دهید. ابتدا فایل local.tgz را استخراج کنید:
tar -zxvf local.tgzپس از استخراج، سه دایرکتوری .ssh، etc/ و var/ در /tmp خواهید داشت. پایگاه داده پیکربندی مربوطه در مسیر زیر است:
/tmp/var/lib/vmware/configstore/backup/current-store-1در این دیتابیس باید هش پسورد root فراموش شده را با هش جدیدی که میدانید جایگزین کنید. چون فایل یک پایگاه داده SQLite است، میتوانید با ابزار sqlite3 آن را ویرایش کنید. هش کنونی پسورد root را میتوانید با دستور زیر ببینید:
/usr/lib/vmware/sqlite/bin/sqlite3 /tmp/var/lib/vmware/configstore/backup/current-store-1 "select * from config where Component='esx' and ConfigGroup = 'authentication' and Name = 'user_accounts' and Identifier = 'root'"
برای تولید هش جدید، میتوانید از دستور زیر استفاده کنید:
openssl passwd -6یا از یک ژنراتور آنلاین استفاده کنید.
سپس هش جدید را به صورت زیر وارد دیتابیس کنید:
/usr/lib/vmware/sqlite/bin/sqlite3 /tmp/var/lib/vmware/configstore/backup/current-store-1 "update config set UserValue='"name":"root","password_hash":"$6$s6ic82Ik$ER28x38x.1umtnQ99Hx9z0ZBOHBEuPYneedI1ekK2cwe/jIpjDcBNUHWHw0LwuRYJWhL3L2ORX3I5wFxKmyki1","description":"Administrator"' where Component='esx' and ConfigGroup = 'authentication' and Name = 'user_accounts' and Identifier = 'root'"
بازسازی state.tgz برای هاست فیزیکی
بعد از جایگزینی هش پسورد، باید فایل state.tgz را دوباره از اجزای اصلی که در /tmp استخراج کردهاید، بازسازی کنید. فایل جدید شامل دیتابیس اصلاح شده خواهد بود:
vmtar -c etc .ssh var -o local.tgz
vmtar -c local.tgz -o local.tgz.ve
tar -czf state-recover.tgz local.tgz.veفایل state-recover.tgz را باید به VM لینوکس منتقل کنید. اگر ESXi روی یک USB نصب شده، میتوانید به سادگی آن را در VM لینوکس مانت کنید. اما اگر ESXi به صورت عادی از دیسک بوت میشود، هاست را از USB با توزیع لینوکسی مثل Ubuntu بوت کنید.
سپس همانند مرحله 5، پارتیشنها را مانت کنید و فایل state.tgz را با state-recover.tgz جایگزین کنید:
sudo su
mkdir -p /bootbank1
mkdir -p /bootbank2
mount /dev/sdb5 /bootbank1
mount /dev/sdb6 /bootbank2
cp /root/state-recover.tgz /bootbank1/state.tgz
cp /root/state-recover.tgz /bootbank2/state.tgz
umount /bootbank1
umount /bootbank2وقتی هاست فیزیکی با این پیکربندی جدید بوت شود، باید بتوانید دوباره با کاربر root وارد شوید.
نکته: اگر پسورد root هاست ESXi را فراموش کنید و نتوانید از طریق vCenter یا اکانت AD ریست کنید، تنها گزینه رسمی، نصب مجدد است. اما یک روش غیررسمی وجود دارد که با استفاده از هاست دوم، پیکربندی هاست اول را ویرایش میکند.









