اگر پسورد کاربر root را در یک هاست ESXi فراموش کنید، راهکار رسمی VMware این است که سیستم را کاملاً مجدداً نصب کنید. این موضوع بهویژه در محیطهای کوچک که از ابزارهایی مانند Host Profiles یا Auto Deploy استفاده نمیشود، دردسرساز است، چون باید تمام تنظیمات بهصورت دستی بازسازی شوند.
با این حال، یک روش غیررسمی برای ریست کردن پسورد وجود دارد که میتواند در برخی موارد مفید باشد، البته VMware آن را تأیید نمیکند.
اگر هاست ESXi شما توسط vCenter Server مدیریت میشود، میتوانید پسورد root را از طریق یک اکانت با دسترسی کافی در vCenter تغییر دهید.
همچنین اگر هاست عضو یک دامنهی Active Directory (AD) باشد، استفاده از کاربران دامنه با دسترسی مدیریتی میتواند گزینه خوبی برای ورود و اعمال تغییرات باشد.
اما اگر هیچیک از این گزینهها در دسترس نباشند و هاست بهصورت standalone باشد (یعنی نه تحت vCenter و نه عضو دامنه)، عملاً امکان بازیابی یا ریست کردن پسورد وجود ندارد. چرا که ESXi از نسخههای 6.x به بعد، هش پسورد را بهصورت رمزگذاریشده در فایلهای پیکربندی ذخیره میکند و برای دسترسی به آن نیاز به دسترسی root است. به همین دلیل، روشهای قدیمی مانند بوت کردن سیستم با یک توزیع لینوکس و ویرایش مستقیم فایلهای پیکربندی دیگر کارایی ندارند.
روش جایگزین بازیابی پسورد Root در ESXi با استفاده از هاست مجازی
در صورتی که امکان استفاده از vCenter یا AD وجود نداشته باشد و هاست ESXi شما standalone باشد، میتوانید از یک روش غیررسمی برای بازیابی پسورد root استفاده کنید. این روش شامل ساخت یک هاست ESXi مجازی، استخراج پیکربندی هاست اصلی و ویرایش هش پسورد در دیتابیس SQLite است.
چرا این روش جواب میدهد؟
فایلهای پیکربندی ESXi از جمله هش پسورد، در یک فایل رمزگذاریشده ذخیره میشوند که فقط هنگام بوت سیستم قابل بارگذاری است. بنابراین، نمیتوان این فایلها را در زمان روشن بودن هاست ویرایش کرد. برای این کار باید هر دو رسانه بوت را روی یک سیستم دیگر (مثلاً لینوکس Live CD) مونت کرده و تغییرات را از آنجا اعمال کنید.
راهاندازی یک هاست ESXi مجازی
برای شروع باید یک نسخه ESXi مجازی با نسخهای کاملاً مشابه هاست فیزیکی بسازید (مثلاً اگر هاست اصلی ESXi 7.0.3 است، هاست مجازی نیز باید دقیقاً همین نسخه باشد).
مراحل ساخت:
- ساخت ماشین مجازی جدید
-
- نوع سیستمعامل را روی Other قرار دهید.
- نسخه مورد نظر ESXi را مطابق با هاست اصلی انتخاب کنید.
- تنظیمات CPU
- در بخش Customize Settings → Virtual Hardware → CPU، گزینه زیر را فعال کنید:
- Expose hardware-assisted virtualization to the guest OS
- اتصال فایل نصب ESXi
- فایل ISO نصب ESXi را از قبل در هاست خود آپلود کنید:
- Storage → Datastore Browser → Upload
- سپس آن را به عنوان درایو DVD برای ماشین مجازی انتخاب کرده و گزینه “Connect at power on” را فعال کنید.
گرفتن بکاپ از فایل state.tgz از هاست فیزیکی
فایل state.tgz یکی از فایلهای حیاتی در ESXi است که تنظیمات دائمی هاست، از جمله هش پسورد root و کلید رمزنگاری فایلهای پیکربندی (مانند local.tgz) را ذخیره میکند. برای ویرایش این فایل، ابتدا باید از آن بکاپ تهیه شود.
نحوه استخراج فایل state.tgz
اگر هاست از USB بوت میشود:
- USB را جدا کرده و به یک سیستم ویندوز وصل کنید.
- فایل state.tgz را از مسیر زیر کپی کنید:
- \bootbank\state.tgz
اگر هاست از دیسک داخلی بوت میشود:
- با استفاده از یک Live CD لینوکس سیستم را بوت کنید.
- دیسک بوت را شناسایی کرده و پارتیشن 6 (با فرمت FAT) را مانت نمایید:
- mount /dev/sdb6 /mnt
- سپس فایل state.tgz را از مسیر زیر استخراج کنید:
- /mnt/bootbank/state.tgz
نکته: بهتر است یک کپی از این فایل روی سیستم محلی یا درایو شبکهای ذخیره کنید و از آن نسخه پشتیبان بگیرید.
انتقال فایل state.tgz به هاست ESXi مجازی
پس از گرفتن بکاپ از هاست فیزیکی، باید فایل را به هاست ESXi مجازی که قبلاً ساختهاید منتقل کنید.
انتقال فایل با scp
اگر فایل روی یک کامپیوتر ویندوزی قرار دارد، میتوانید با استفاده از دستور زیر آن را منتقل کنید (فرض بر این است که WinSCP یا ابزار مشابه نصب شده است):
scp "C:\temp\state.tgz" root@10.0.7.155:/tmp/state.tgz
آدرس IP در اینجا باید مربوط به هاست ESXi مجازی باشد.
سپس وارد هاست مجازی شوید و فایل را استخراج کنید:
cd /tmp
tar -zxvf state.tgz
وارد کردن کلید رمزنگاری هاست فیزیکی به هاست مجازی
حالا باید فایل رمزگذاریشده state.tgz هاست مجازی را باز کرده، کلید رمزنگاری هاست فیزیکی را جایگزین کرده و فایل جدیدی بسازید.
دستورات لازم
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
ویرایش فایل پیکربندی در هاست هدف
بعد، فایل /tmp/state-mod.tgz را به کامپیوتر خود کپی کنید:
scp root@10.0.7.155:/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 ابزار امن کپی فایل بین سیستمها است.
- thomas@10.0.7.140 یعنی نام کاربری thomas روی ماشین لینوکس با آدرس IP مذکور.
- /home/thomas/state-mod.tgz مسیر مقصد فایل در لینوکس است.
بعد از اجرای این دستور، سیستم از شما پسورد کاربر thomas را میپرسد و پس از وارد کردن آن، انتقال فایل آغاز میشود.
اگر در ویندوز از ترمینال معمولی استفاده میکنید و دستور scp شناسایی نمیشود، باید OpenSSH Client را نصب یا از ابزارهایی مانند PuTTY (pscp) استفاده کنید.
scp "C:\temp\state-mod.tgz" thomas@10.0.7.140:/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
</code >
سپس فایل VMDK را از VM لینوکس جدا کرده و هاست مجازی را دوباره راهاندازی کنید. حالا پیکربندی با کلید رمزگشایی شده هاست فیزیکی بارگذاری میشود.
کپی کردن state.tgz هاست فیزیکی به ESXi مجازی و رمزگشایی local.tgz.ve
در این مرحله، فایل 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
یا از یک generator آنلاین استفاده کنید.
سپس هش جدید را به صورت زیر وارد دیتابیس کنید:
/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 وارد شوید.