Смена забытого root пароля в VM proxmox

Естественно, клиенты теряют пароли от виртуальных машин, работающих на виртуализации KVM под управлением гениальной, мощной, удобной системы управления proxmox.

Само собой, довольно просто загуглить варианты с редактированием загрузчика в VNC, добавлением init=/bin/sh в конец строки. Затем перемонтируем корень в rw командой mount -rw -o remount / и собственно, меняем пароль стандартной командой passwd

Однако этот способ годится для современных ОС. У нас же, как всегда — случай нестандартный, ядро linux старое (2.4) и не монтировался /proc с сообщением «mount could not open /proc/partitions»

Соответственно, заходим в консоль хостовой ноды по ssh, отключаем виртуалку в вебмордочке proxmox, обращая внимание на ID. В моем случае -102.

Образ диска у виртуалки находится в директории /var/lib/vz/images/102 и представлен одним файлом — /var/lib/vz/images/102/vm-102-disk-0.qcow2

Нужно смонтировать этот диск, сделать chroot в систему и сменить пароль. Приступаем? Дааа!

Смонтировать диск напрямую не удастся, там ведь несколько разделов:

mount  /var/lib/vz/images/102/vm-102-disk-0.qcow2 /mnt
mount: wrong fs type, bad option, bad superblock on /dev/loop2,
       missing codepage or helper program, or other error
 
       In some cases useful info is found in syslog - try
       dmesg | tail or so.

Нужно подгрузить модуль ядра nbd и посмотреть разделы на диске qcow2. Действуем так:

modprobe nbd max_part=8
#  подключаем диск в /dev/nbd0
qemu-nbd --connect=/dev/nbd0 /var/lib/vz/images/102/vm-102-disk-0.qcow2
# Смотрим разделы на нем:
fdisk /dev/nbd0 -l
Disk /dev/nbd0: 32 GiB, 34359738368 bytes, 67108864 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x00000000
 
Device      Boot    Start      End  Sectors  Size Id Type
/dev/nbd0p1 *          63   208844   208782  102M 83 Linux
/dev/nbd0p2        208845 63022994 62814150   30G 83 Linux
/dev/nbd0p3      63022995 67103504  4080510    2G 82 Linux swap / Solaris

Вот тут мы и видим нужный нам раздел — /dev/nbd0p2, так как первый это загрузчик boot, а третий — swap

Как говорится, остальное — дело техники:

# Монтируем раздел в /mnt
mount /dev/nbd0p2 /mnt
# Делаем chroot в виртуальный диск
chroot /mnt
# меняем пароль в новой виртуалке
bash-2.05b# passwd
Changing password for user root.
New password: 
Retype new password: 
passwd: all authentication tokens updated successfully.
bash-2.05b# exit
exit
# отмонтируем диск
umount /mnt

На этом всё. Осталось только включить виртуалку и войти в нее с новым паролем.

Важное добавление. Иногда, при работе в виртуальном КВМ, нужно пробросить дополнительный диск для программ, которые нужно использовать в виртуальной машине, например — с Windows. действуем так:

#
# создаем место, куда смонтируем диск
mkdir /mnt/ramdisk
# создаем в памяти диск нужного размера (здесь - 4Gb)
mount -t tmpfs -o size=4G tmpfs /mnt/ramdisk
# подгружаем модуль nbd
modprobe nbd max_part=8
# создаем  диск для монтирования в VM
qemu-img create -f qcow2 /mnt/ramdisk/disk1.qcow2 4G
Теперь можно создать нужный раздел, например FAT32, смонтировать его. После чего записать нужные файлы на этот диск и передать в VM.
 #
# Монтируем диск и создаем раздел на нем..
qemu-nbd --connect=/dev/nbd0 /mnt/ramdisk/disk1.qcow2
mkfs.fat32 /dev/nbd0
Теперь можно копировать на новый диск данные через SCP и подсовывать диск в виртуалку -hdd /dev/nbd0

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *