VMware ESXi 5 – VNC to a guest

One of the more annoying things is that by default one have to use the vSphere client to access the console of a guest.

Some people have decided to modify the firewall on the host to get direct access to the guest, but there is a simpler way to accomplish this.

  1. enable ssh key authentication on the host
  2. add the following to the guest configuration (needed no matter what)
    RemoteDisplay.vnc.enabled = “true”
    RemoteDisplay.vnc.port = “<port number for the vnc server>”
  3. configure your vnc client to use ssh, for example with Chicken of the VNC:
    Host: <your vmware esxi host>
    Port: the port number specified for the guest
    [X] Tunnel over SSH
    SSH Host: root@<your vmware esxi host>

VMware ESXi 5 – ssh key authentication

One of the big mysteries about VMware ESXi is how to enable ssh key authentication, as there are many solution. From making a .tgz file and store it in /bootbank, to more elaborate solutions where one modifies one of the .tgz files.

The easiest way is simply to copy your .pub file to /etc/ssh/keys-root/authorized_keys and presto it will work for the root user.

WMware ESXI – suspend all guests

I have an VMware ESXI 5 which I used for testing things, but I don’t want it to run all the time, and using the vSphere Client to stop all the VM’s and then stop the ESXI server is a bit too much effort.

So I figured out how to do it from the commandline using ‘vim-cmd’.


VMS=`vim-cmd vmsvc/getallvms | grep -v Vmid | awk '{print $1}'`
for VM in $VMS ; do
     PWR=`vim-cmd vmsvc/power.getstate $VM | grep -v "Retrieved runtime info"`
     if [ "$PWR" == "Powered on" ] ; then
          name=`vim-cmd vmsvc/get.config $VM | grep -i "name =" | awk '{print $3}' | head -1 | cut -d """ -f2`
          echo "Powered on: $name"
          echo "Suspending: $name"
          vim-cmd vmsvc/power.suspend $VM > /dev/null &

while true ; do
     for VM in $VMS ; do
          PWR=`vim-cmd vmsvc/power.getstate $VM | grep -v "Retrieved runtime info"`
          if [ "$PWR" == "Powered on" ] ; then
          echo "Waiting..."
     if [ $RUNNING -eq 0 ] ; then
          echo "Gone..."
     sleep 1
echo "Now we suspend the Host..."
vim-cmd hostsvc/standby_mode_enter

This is working just fine, until one discovers the there is no where to store files on the ESXI servers file system without having to restore them after a reboot.

A bit of googing gave me an answer, create a directory in one of the datastores and save it there.

Like in ‘/vmfs/volumes/datastore1/scripts/’, where it will stay after a reboot.

Now to wake the host again, requires that one enable wake-on-lan (wake on PCI and PCIe normally should do it), and then use the wakelan / wol utility;

# wol <mac addr>

This it’s possible to hide ones noisy computers somewhere far far away.