March 24, 2017

Autostart VM's from CLI

If VM's are configured Startup/shutdown on boot, you can start manually by running:

/sbin/ start

on the command line.

Login to Synology NAS with SSH Keys

On the host you want to be able to login from:

run "ssh-keygen -t rsa" make sure to have a blank passphrase

cat /root/.ssh/ and save that info for later

On the Synology NAS

Edit /etc/ssh/sshd_config change

#RSAAuthentication yes
#PubkeyAuthentication yes
#AuthorizedKeysFile .ssh/authorized_keys

to this:

#RSAAuthentication yes
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys

Add the necessary files, folders and permissions

mkdir /root/.ssh
touch /root/.ssh/authorized_keys
chmod 700 /root/.ssh
chmod 644 /root/.ssh/authorized_keys

Add your pub key to /root/.ssh/authorized_keys:

echo "ssh-rsa yourkey youruser@yourhost" >> /root/.ssh/authorized_keys


ESX VM and Host Shutdown Script


# Get list of ALL VM's
# (\d{1,2})\s+([\w\d\-]+).*\n

$cmdvmlist = "vim-cmd vmsvc/getallvms";

# RegEX for running VM's
# ([\d]+\-[\w\d\s\.]+)\n\s+World ID:\s(\d+)

$cmdvmrunning = "esxcli vm process list";

$esxhost = "root\@";

$vmlist = `ssh $esxhost $cmdvmlist`;

#print $vmlist;

# ([\d]+\-[\w\d\s\.]+)\n\s+World ID:\s(\d+)

my @shutdownorder;


print "VM Inventory on $esxhost\n";

while ($vmlist =~ /(\d{1,2})\s+([\w\d\-]+).*\n/g)

        # Don't shutdown the VM running this script until last as it also controls APCUPSD

        if ($1 != 30)
                $shutdownorder[$count] = $1;
                $shutdownordername[$count] = $2;


print "VMID\tName\n";

my $index;
for my $order (@shutdownorder) {
  print "$order \t $shutdownordername[$index++]\n";

# If shutdown argument is present, shutdown VM's

if ($ARGV[0] eq "shutdown")
        open (my $fh, '>', "/tmp/esxhostscript");

        print "\nCreating Script for ESX Host\nUploading ";

        while (@shutdownorder)
                $vm = shift(@shutdownorder);

                print $fh "vim-cmd vmsvc/power.shutdown $vm\n";

        print $fh "shutdown +3\n";

        close $fh;

        # Copy script to ESX Host


        # Add Execute Permission

        system("ssh","root\@","chmod +x /tmp/esxhostscript");

        # Execute Script


        print "Waiting for VM's to shutdown\n";

        while (CheckRunning())
                print ".";
                sleep 5;
        print "\n\n";

        # SHUTDOWN NAS

        @nasshut1 = `ssh -p 9999 shutdown -h now`;
        @nasshut2 = `ssh -p 9999 shutdown -h now`;


        printf "shutdown argument not passed, no action taken\n"

sub CheckRunning

        $vmrun = `ssh $esxhost $cmdvmrunning`;

        while ($vmrun =~ /([\d]+\-[\w\d\s\.]+)\n\s+World ID:\s(\d+)/g)
                if ($2 ne "91789")
                        return 1;
        return 0;