Не так давно мне понадобилось запустить образ CentOS, «заточенный» под облака, так называемый Cloud Image, далеко не в облаке. Особенность этих образов в том, что изначально там не заданы пароли пользователей, а аутентификация производится с помощью ssh ключей, передаваемых в систему на этапе запуска.
Попасть в такую систему не так сложно, когда у развернутой из образа машины есть выход в сеть, но становится реальной задачей, когда доступа нет.
Для правки «облачного образа» и задания паролей пользователям можно использовать утилиту virt-customize и под катом коротко про нее.
Далее все операции проводятся под управлением CentOS7.
Для начала нам необходимо установить libvirt на рабочую машину, а также пакет libguestfs-tools.
Установим и запустим libvirt:
# yum install libvirt
# systemctl enable --now libvirtd
И пакет libguestfs-tools:
# yum -y install libguestfs-tools
Теперь загрузим образ ОС, если этого не было сделано ранее. В моем случае это CentOS GenericCloud:
# wget https://cloud.centos.org/centos/7/images/CentOS-7-x86_64-GenericCloud-2009.qcow2 -P /tmp
Внесем правки в образ, задав пароль пользователю root и удалив cloud-init с помощью virt-customize:
# virt-customize -a /tmp/CentOS-7-x86_64-GenericCloud-2009.qcow2 \
--root-password password:password \
--uninstall cloud-init \
--run-command "echo 'This is MY image' > /custom_image.txt"
[ 0.0] Examining the guest ...
[ 33.5] Setting a random seed
[ 33.6] Uninstalling packages: cloud-init
[ 39.0] Running: echo 'This is MY image' > /custom_image.txt
[ 39.8] Setting passwords
[ 52.2] Finishing off
Этой командой мы:
- Задали пароль пользователя root;
- Удалили пакет cloud-init;
- Создали в корне текстовый файл с некоторым содержимым.
На этом, собственно, все. Загружаем систему из образа и входим в систему пользователем root и заданным паролем: