آموزش بازیابی پسورد فراموش شده root در ESXi 7.x و ESXi 8.x
اگر پسورد root برای ESXi را فراموش کنید، VMware توصیه میکند که ESXi را مجدداً نصب کنید. در محیطهای کوچک که رولاوتهای خودکار و پروفایلهای مرکزی ندارند، باید همه تنظیمات را به صورت دستی انجام دهید. به صورت جایگزین، میتوانید از یک روش غیررسمی برای ریست کردن پسورد استفاده کنید. اگر ESXi را از طریق vCenter مدیریت میکنید، میتوانید پسورد را با استفاده از یک اکانت دارای امتیازات در vCenter ریست کنید. همچنین، داشتن هاست ESXi به عنوان عضوی از یک دامنه AD میتواند کمک بزرگی باشد. اگر این گزینهها در دسترس نباشد، نمیتوانید پسورد یک هاست standalone را ریست کنید چون سیستم هش پسورد را در یک فایل تنظیمات رمزگذاری شده ذخیره میکند که بدون دسترسی root نمیتوانید آن را رمزگشایی کنید. به همین دلیل روش قدیمی بوت کردن هاست از لینوکس و ویرایش مستقیم فایل تنظیمات پس از ESXi 6.x دیگر کار نمیکند.
راهکار جایگزین با استفاده از هاست مجازی
روش اینجا شامل راهاندازی یک هاست دوم (مجازی) و انتقال کلید هاست اصلی به آن است. این امکان را به شما میدهد تا پیکربندی را استخراج کرده و هش پسورد را در دیتابیس SQLite تغییر دهید. برای انجام این کار، باید رسانه بوت هر دو هاست فیزیکی و مجازی را به صورت خارجی مونت کنید چون نمیتوانید فایل تنظیمات را در زمان اجرای سیستم بازنویسی کنید و سیستم در بوت بعدی تغییرات را رد میکند. یک سیستم لینوکس برای دسترسی به تنظیمات ESXi مناسب است؛ استفاده از live CD سادهترین راه است.
نصب یک ESXi مجازی
برای ویرایش پیکربندی ESXi هاست فیزیکی، به یک هاست ESXi دیگر با نسخه دقیقاً یکسان نیاز دارید که پسورد آن را فراموش نکردهاید.
یک ماشین مجازی جدید بسازید، سیستمعامل میهمان را Other انتخاب کنید و نسخه ESXi که قصد نصب آن را دارید، انتخاب کنید.
سپس به صفحه Customize Settings بروید، در بخش Virtual Hardware => CPU گزینه Expose hardware-assisted virtualization to the guest OS را فعال کنید.
در نهایت، فایل ISO نصب ESXi را به عنوان درایو DVD متصل کنید و گزینه Connect at power on را فعال نمایید. ابتدا باید این فایل را در هاست ESXi از طریق Storage => Datastore Browser => Upload آپلود کنید.
گرفتن بکاپ state.tgz
مرحله بعدی بکاپ گرفتن از فایل state.tgz روی هاست فیزیکی است. این فایل دادههای پیکربندی پایدار را که هاست برای بازیابی وضعیت خود در بوت بعدی نیاز دارد ذخیره میکند.
این فایل شامل هش پسورد فراموش شده و کلیدی است که برای رمزگذاری فایل local.tgz درون آن استفاده شده.
اگر هاست را از USB بوت کردهاید (که توسط VMware توصیه نمیشود)، آن را جدا کرده و به یک کامپیوتر ویندوز وصل کنید. اگر هاست از دیسک داخلی بوت میشود، آن را از طریق درایو خارجی به یک محیط لینوکس بوت کنید و پارتیشن 6 را که فرمت FAT دارد به عنوان مثال به /mnt مانت کنید:
mount /dev/sdb6 /mnt
سپس فایل /mnt/bootbank/state.tgz
را به دیسک محلی (اگر قابل نوشتن است) یا به یک درایو شبکه با استفاده از ابزارهای استاندارد لینوکس مثل scp
یا ftp
کپی کنید. همچنین توصیه میشود یک نسخه پشتیبان از این فایل تهیه کنید.
کپی کردن state.tgz به ESXi مجازی
بعد، فایل بکاپ را به دایرکتوری /tmp
هاست ESXi مجازی منتقل کنید، مثلاً با scp
. اگر فایل روی کامپیوتر ویندوز است، دستور ممکن است اینگونه باشد:
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 ریست کنید، تنها گزینه رسمی، نصب مجدد است. اما یک روش غیررسمی وجود دارد که با استفاده از هاست دوم، پیکربندی هاست اول را ویرایش میکند.