In January I posted about using the VirtualBox command line tool "VBoxManage" to make a new virtual machine on a headless system (https://opensecgeek.blogspot.com/2017/01/creating-remote-virtualbox-vm-with-ssh.html). Doing that for each one you want to make, though, gets tiring. It's a lot easier to script the process.
A few years ago I sat through a forensics class with a brilliant lad named Kevin. You can check him out at https://techanarchy.net. While our SANS instructor was telling a story about an experience he had with shadow copies, Kevin wrote a python script that searched a disk image for shadow copies and mounted each one into its own directory. By the end of the next break he'd added error checking and various other tidbits. That is not the depth of script I'm prepared to write.
Instead, I am content with a basic shell script that has some constants declared and then uses those to create a new VM.
Something Simple - Using What I Already Know
What I came up with was this:
In Plain Text
The text version (in case someone wants to cut/paste/edit) is:
#!/bin/sh
VBOX_CMD=/usr/bin/vboxmanage
VM_NAME=FBSDTemplate
VM_TYPE=FreeBSD_64
MEM_SIZE=128
HD_SIZE=10000
HD_FILE="VirtualBox VMs/$VM_NAME/$VM_NAME.vdi"
RDP_PORT=3389
INST_FILE=FreeBSD-11.0-RELEASE-amd64-disc1.iso
echo Creating VM
$VBOX_CMD createvm --name $VM_NAME --ostype $VM_TYPE --register
echo Creating HD
$VBOX_CMD createhd --filename "$HD_FILE" --size $HD_SIZE
echo Adding IDE Controller
$VBOX_CMD storagectl $VM_NAME --name "IDE Controller" --add ide --controller PIIX4
echo Attaching HD
$VBOX_CMD storageattach $VM_NAME --storagectl "IDE Controller" --port 0 --device 0 --type hdd --medium "$HD_FILE"
echo Attaching DVD
$VBOX_CMD storageattach $VM_NAME --storagectl "IDE Controller" --port 0 --device 1 --type dvddrive --medium $INST_FILE
echo Setting RDP Port
$VBOX_CMD modifyvm $VM_NAME --vrdeport $RDP_PORT
echo Enabling RDP
$VBOX_CMD modifyvm $VM_NAME --vrde on
echo Setting Memory Size
$VBOX_CMD modifyvm $VM_NAME --memory $MEM_SIZE
echo Powering on VMBasically, I just took the steps from my previous post about headless VirtualBox and replaced the VM info with constants. Note that this script creates a VM with a 10GB hard drive and 128MB of RAM. That is fine for FreeBSD but if you create an Ubuntu Server VM you want at least 512MB of RAM or the installer may fail. Guess how I know...
$VBOX_CMD startvm $VM_NAME --type headless
Now if I want to roll out an Ubuntu VM I can just make sure I have the install ISO, edit a few constants at the top, run the script and the new VM is ready for installation and listening for a VRDE connection on port 3389.
You can get the above script with:
git clone https://github.com/kevinwilcox/vbox
Sample Output
When it runs, it looks a lot like this (notice I've changed the VM name from FBSDTemplate to OpenSecGeekScript):
Quick and easy!
In Closing
A more sophisticated script has its appeal - it would be nice to run a command and have it prompt for the VM name, a selection from a list of supported OS types, the amount of RAM, the hard disk size and even the ISO to use for installation. Perfect is the enemy of the good and, in this case, this is good enough for me. Well, it's good enough for a first run!
No comments:
Post a Comment
Note: only a member of this blog may post a comment.