Pillola #20: Spegnimento forzato macchine Windows virtualizzate tramite Proxmox

I server Microsoft purtroppo non gestiscono in modo uniforme (XP ha un comportamento, 2000 un'altro, 2003 un'altro ancora...) la modalità "gracefully stop" e pertanto si è scelto di installare su di ogni server Microsoft virtualizzato il software poweroff.

Poweroff è liberamente scaricabile dal seguente indirizzo:

http://users.telenet.be/jbosman/applications.html

LATO SERVER M$
- copiare il file "poweroff.exe" in una qualsiasi cartella (es. c:\programmi\poweroff)
- eseguirlo almeno una volta
- configurare la sezione "Select computer" impostando "Local Computer"
- configurare la sezione "Action" impostando il valore "No action"
- configurare la sezione "Options" impostando i valori "Force application to close", "Visible in tray", "Allow cancel", "Allow remote control"
- selezionare "Settings" nella sezione "Options" e impostare la password di accesso da utilizzare per lo spegnimento (es. lamiasuperpasswordsegretissimaesequalcunoprovaacrackarlaglispezzolebraccine)
- configurare la sezione "When" impostando il valore "Immediate"
- selezionare la voce di menu "Services / Create services"
- selezionare la voce di menu "Service / Save settings to service"
- chiudere l'applicativo tramite il pulsante "Close"

LATO PROXMOX, è stato installato "expect" per gestire le comunicazioni tra host e server virtualizzati tramite apposito script.

apt-get install expect

e utilizzo il seguente script per forzare lo spegnimento del server M$:

cat /usr/bin/spegniserverms.sh 
#!/usr/bin/expect

# procedure to attempt connecting; result 0 if OK, 1 otherwise
proc connect {} {
expect {
"201 Welcome to Poweroff 3.0.1.3 created by Jorgen Bosman" {
send "PASSWORD lamiasuperpasswordsegretissimaesequalcunoprovaacrackarlaglispezzolebraccine\r"
expect {
"250 OK" {
return 0
}
}
}
}
# timed out
return 1
}

set nomeserver [lindex $argv 0]
if { $nomeserver == "" } {
puts "Utilizzo: \n"
exit 0
}

set timeout 5
spawn telnet [lindex $argv 0] 3210

set rez [connect ]
if { $rez == 0 } {
send "ACTION shutdown\r"
expect "250 OK"
send "DOIT\r"
expect "250 OK"
send "QUIT\r"
expect eof
exit 0
}
puts "\nErrore di connessione al server $nomeserver\n"
exit 0
chmod 770 /usr/bin/spegniserverms.sh

utilizzo la seguente sintassi per forzare lo spegnimento del server

spegniserver IPDELSERVER