The following code could be used to make the Ubuntu cloudimg usable on a Debian 7.2 (wheezy) machine:
apt-get install pwgen
apt-get install genisoimage
git clone -b master https://git.launchpad.net/cloud-utils
printf "#cloud-config\n" > user-data
printf "password: `pwgen 8 1`\nchpasswd: { expire: False }\nssh_pwauth: True\n" >> user-data
./cloud-utils/bin/cloud-localds user-data.img user-data
Subsequently, you'd start the image like this, from within a tmux window to make sure it'll keep running even if you logout:
kvm -m 2048 -smp 2 -hda ubuntu-18.10-server-cloudimg-amd64.img -hdb user-data.img -net nic -net user,hostfwd=tcp::1810-:22 -nographic
You can then login into the machine as user ubuntu and the password as generated within the user-data file. The login can be either through the serial console printed by kvm (which would normally be pretty slow, even if you have an ssh connection on top of it), or through ssh with ssh ubuntu@localhost -p1810. The user ubuntu gets passwordless sudo access as root by default.
P.S. I've also tried playing with adding the ssh-authorized-keys, but cloud-config format seems very fragile, and at top level it's just ignored, whereas at a users: level as below, the whole ubuntu user seems to break (at least the password part of it). Here's the code to get the keys into a format that's potentially legible for cloud-config:
printf "users:\n - name: ubuntu\n ssh-authorized-keys:\n" >> user-data
cat ~/.ssh/id_rsa.pub ~/.ssh/authorized_keys | sed 's/^/ - /g' >> user-data
(Note that the password, apparently, may not be a valid field for the users specification, as it has a passwd hash instead, so, the whole thing breaks the prior code, because now the user ubuntu gets created without a password.)