Kali Linux Cloud Init Image
Published: 8th of April 2022
Kali is a purpose build Linux distribution for penetration testing. They have many pre-built deployment options, but unfortunately a cloud-init compatible image is not one of them. In this post, I will show you how to convert a pre-build VMware image into a cloud-init compatible image that can be used in Proxmox, OpenStack and other environments that utilize cloud-init.
The following software was used in this post.
- Kali Linux - 2022.1
- Ubuntu - 2004
Before we can prepare the image we need to install the required system tools. I am using an Ubuntu 2004 host for the conversion process.
sudo apt install -y libguestfs-tools p7zip-full p7zip-rar
We will be converting the VMware image, so let's download the image to our local machine.
Unpack the image.
7za x kali-linux-2022.1-vmware-amd64.7z
Convert the image from VMDK format to RAW format.
qemu-img convert -f vmdk -O raw kali-linux-2022.1-vmware-amd64.vmwarevm/kali-linux-2022.1-vmware-amd64.vmdk kali-2022.1.img
Now we need to customize the image to make it configurable with cloud-init.
sudo virt-customize -a kali-2022.1.img --install cloud-init
Install qemu-guest-agent so that the guest can be controlled by the hypervisor.
sudo virt-customize -a kali-2022.1.img --install qemu-guest-agent
By default, the SSH service is disabled. I want to SSH to the VMs when I build them, so I am enabling the SSH service.
sudo virt-customize -a kali-2022.1.img --run-command 'systemctl enable ssh.service'
Finally, let's update the image with the latest packages.
sudo virt-customize -a kali-2022.1.img --update
By default, the username to login to the image is kali and an SSH keypair is required. This can of course be modified with cloud-init.
And that's it! Now, you can copy the image to your environment of choice and configure the Kali VM on boot with cloud-init.
In this post, I showed you how to convert a Kali Linux VMware VM image to a cloud-init compatible image that can be used in Proxmox, OpenStack and other environments that utilize cloud-init. Thanks for following along ✌️