How do I set a password on an Ubuntu cloud image?
Solution 1:
18.04 setup step-by-step
In short you need:
sudo apt-get install cloud-image-utils
cat >user-data <<EOF
#cloud-config
password: asdfqwer
chpasswd: { expire: False }
ssh_pwauth: True
EOF
cloud-localds user-data.img user-data
# user-data.img MUST come after the rootfs.
qemu-system-x86_64 \
-drive file=ubuntu-18.04-server-cloudimg-amd64.img,format=qcow2 \
-drive file=user-data.img,format=raw
...
and now you can login with:
- username:
ubuntu
- password:
asdfqwer
Here I describe a full minimal detailed working QEMU example: https://askubuntu.com/questions/281763/is-there-any-prebuilt-qemu-ubuntu-image32bit-online/1081171#1081171
Solution 2:
Questions
It would be useful if you could add background information to the question, like:
- Why do you need to set a root password. Maybe there is an alternative way. What are you trying to accomplish?
- According to (1), the recommended way might be one among several options: root user with password, a new user with ssh key and sudo, others.)
- What's your host operating system?
- VirtualBox version?
- VMWare vsphere version?
General plan
- Set the correct settings for Virtualbox
- Create the user-data and meta-data files
- Generate the ISO image for cloud-init
- Boot the VM with the attached ISO image as a removable device
Virtualbox
- You can import the OVA as an appliance, use an IMG or VMDK disk. You can do this in the GUI or the command line.
- You should enable the serial port in the hardware settings for the VM. Optionally, point it to a raw file in your home, so you can see the log in case of problems.
- You need the iso/img generated below for cloud-init and mount it in the dvd or cd device for the VM you imported. If the VM doesn't include a dvd/cd device, you have to add one. Add it as IDE and master, then load the ISO generated below.
Cloud-Init
If you are using the Ubuntu Cloud Images, you should use Cloud-Init for setting the initial configuration, it allows you to set up:
- Default locale
- Hostname
- Generating and setting up SSH private keys
... among other features.
Cloud-init's behavior can be configured via the user-data flag for inline commands or calling a YAML type config file with the settings to apply.
This is might be done via the --user-data
or --user-data-file
argument when you are running inline, or you can do it with the ISO. I'm going to show the steps for the ISO mount mode.
I will not setup a password for root or the user, I'm creating instead a new user with SSH access via ssh public keys and allowing the user sudo permissions instead.
Here is a sample user-data cloud-config file, create it with your text editor, and respect the name or the seed file won't be a valid seed and won't work.
#cloud-config
users:
- default
- name: eddypronk
ssh-authorized-keys:
- <your user public key here>
sudo: ALL=(ALL) NOPASSWD:ALL
groups: sudo
shell: /bin/bash
You can also have a meta-data for the hostname and other definitions:
instance-id: set-an-unique-instance-name-id
local-hostname: set-the-hostname
After creating the files generate an iso file to load as a cdrom or dvd from the virtual manager:
genisoimage -output nocloud.iso -volid cidata -joliet -rock user-data meta-data
You need genisoimage
for this or the cloud-utils
tool cloud-localds
for this other option:
cloud-localds my-seed.img my-user-data my-meta-data
Remember that if you leave the seed / nocloud iso mounted, it will ovewrite the settings in the VM with those in the data files. And if you change anything in user-data or meta-data you need to rebuild the iso or img.
Boot
You can now boot the VM. By default, you can not ssh to the machine using the username and password or connect through the VNC console (the "graphical" VM window in Virtualbox). You have to use public / private key authentication method with ssh. This means enabling a user with a public ssh key in the user-data YAML file. Also, sudo privileges elevation for the ubuntu account is passwordless, but the account is locked by default.
Solution 3:
Here is a link to the possible solution https://techglimpse.com/nova-boot-instance-with-password/
Create a file called userdata.txt with the below contents:
#cloud-config
password: mypasswd
chpasswd: { expire: False }
ssh_pwauth: True
Now, pass userdata.txt file as an input while creating a new instance as shown below:
#openstack server create --flavor m1.small --image Ubuntu-Trusty --key-name mykey --nic net-id=88536e89-12a9-41eb-8aed-57983ee299e8 --security-group default --user-data=userdata.txt my-ubuntu
The above command will set password mypasswd for the default user ubuntu.