A distanza di qualche anno vogliamo tornare ad esplorare le potenzialità di scripting di Macrium SiteBackup (in precedenza chiamato SiteManager).
Anni fa, abbiamo pubblicato un articolo su come creare degli script lato Agent raggiungibile alla seguente pagina
In questo articolo, invece, siamo ad esplorare le potenzialità di scripting lato server, cioè sul computer in cui è installato SiteBackup.
Per far ciò analizziamo un caso concreto d’uso di SiteBackup in cui si desidera che ogni notte alle 2:00 SiteBackup effettui una replica dei file del “repository” principale su un NAS QNAP, collegato in fibra ottica in un locale piuttosto distante.
Dato che NAS QNAP viene utilizzato solo a questo scopo, si è ritenuto opportuno mantenerlo normalmente spento ed accenderlo solo per il tempo necessario alla sincronizzazione della replica del repository.
Per l’accensione del NAS QNAP ricorriamo alla funzionalità di accensione programmata presente nel menu di gestione energia raggiungibile cliccando l’icona “Sistema” in alto a sinistra e poi la voce del menu “Alimentazione” e successivamente la linguetta “Programmazione alimentazione”.
Per lo spegnimento, invece, rinunciamo all’utilizzo della possibilità di spegnere il NAS ad un orario programmato in quanto il tempo necessario alla sincronizzazione dei due repository può variare da pochi minuti o parecchie ore a seconda della mole di nuovi dati salvati giornalmente nel repository di SiteBackup.
La soluzione ideale sarebbe quindi che il NAS QNAP venga spento non appena SiteBackup termina la sincronizzazione della replica.
Per ottenere ciò, abbiamo deciso di sfruttare gli eventi registrati da SiteBackup nel Registro Eventi di Windows che, ad ogni completamento della replica avvenuto con successo, SiteBackup scrive e che possono essere usati per eseguire, tramite il Gestore degli Eventi Programmati di Windows, uno script che invia un comando di spegnimento al NAS QNAP da remoto. Per individuare l’evento di fine sincronizzazione della replica creato da SiteBackup:
Apriamo il Visualizzatore eventi
- clicchiamo con il tasto destro sul pulsante Start e selezioniamo “Visualizzatore eventi”;
- in alternativa, digitiamo
eventvwr.msc
nella casella della finestra “Esegui” che si apre premendo i tasti Windows + R; - o ancora digitiamo “Visualizzatore eventi” nella barra di ricerca del menu Start e selezioniamo l’app.
Navighiamo tra i log
- Nel pannello di sinistra, espandiamo la voce “Registri di Applicazioni e servizi”.
- Qui troviamo la categoria: Macrium Site Manager con gli eventi registrati dal SiteBackup.
- Clicchiamo sulla categoria Operational.
- Nel riquadro centrale vedremo l’elenco degli eventi su cui cliccandoci sopra saranno visualizzati i relativi dettagli.
- Possiamo eventualmente usare la funzione “Filtra registro corrente”dal pannello destro per restringere la ricerca a determinati tipi di eventi o intervalli temporali.
Per fare eseguire un script automaticamente dopo che sia stato aggiunto un evento contente una particolare stringa o un particolare ID nel registro eventi di Windows, possiamo sfruttare il Task Scheduler di Windows configurandolo con un meccanismo di monitoraggio degli eventi registrati da Windows. Ecco come faremo:
Creiamo una regola di evento personalizzata (Event Trigger)
Windows Task Scheduler può attivare un’attività in risposta a un evento specifico nel log eventi, cercando una stringa o un Event ID particolare.
- Apriamo quindi l’Utilità di pianificazione (Task Scheduler).
- Creiamo una nuova attività con nome “Qnap_NAS_shutdown”.
- Nella linguetta Trigger, scegliamo Nuovo > Al verificarsi di un evento.
- Selezioniamo il registro Operational dell’origine Macrium Site Manager (quello prima individuato nel Registro eventi).
- Come ID evento indichiamo quello specifico prima individuato nel Registro eventi (nel nostro caso l’ID 814).
Impostiamo l’azione per eseguire lo script
- Nella linguetta Azioni dell’attività, scegliamo Avvio programma.
- Inseriamo nella casella “Programma o script” il percorso del nostro script batch (ad esempio: C:\Users\Administrator\Documents\plink_shutdown_qnap_nas.bat).
- Salviamo il tutto prima di uscire.
Se vogliamo controllare che effettivamente al verificarsi dell’evento sia lanciato il file .bat dobbiamo attivare la cronologia dell’esecuzione degli script nella utilità di pianificazione di Windows.
Per attivare la cronologia tramite l’app Utilità di pianificazione
- Premiamo il tasto Windows, digitiamo pianificazione attività e clicchiamo su Apri.
- Nel pannello a sinistra, facciamo clic con il tasto destro su Libreria dell’Utilità di pianificazione.
- Selezioniamo Attiva la cronologia di tutte le attivitàdal menu contestuale.
- Da questo momento, ogni volta che un’attività verrà eseguita, l’esecuzione sarà registrata nella scheda Cronologia dell’attività stessa.
Una volta abilitata la cronologia lanciamo manualmente una replica dal SiteBackup andando sul menu Active Backups e cliccando sulla freccia a dx nella riga relativa.
Una volta terminata la replica, riapriamo l’Utilità di pianificazione di Windows e selezioniamo Qnap_NAS_shutdown
Se clicchiamo la linguetta “cronologia” adesso potremo vedere gli eventi generati da SiteBackup registrati nei log di Windows
Creiamo lo script per Windows per spegnere da linea di comando il NAS QNAP da remoto
Per spegnere da remoto il NAS QNAP usando la riga di comando di Windows, possiamo usare il protocollo SSH. Dobbiamo quindi abilitare il protocollo SSH sul NAS per poter ricevere il comando di spegnimento da remoto. Per utilizzare il protocollo SSH è necessario disporre delle credenziali di autenticazione dell’amministratore principale del NAS.
Prerequisiti:
- SSH abilitato sul NAS QNAP (Pannello di controllo > Servizi di rete e file > Telnet/SSH > Abilita SSH).
- Un account utente sul NAS con il permesso di eseguire il poweroff (solitamente admin).
- Il NAS e il PC Windows devono essere sulla stessa rete locale (LAN).
Usiamo Plink (PuTTY Command-Line Tool) per rendere più semplice il test di funzionamento dello script rispetto ad altre soluzioni più “sicure” che non necessitano l’uso della password di admin.
Scarichiamo la versione di plink.exe più adatta dal sito di PuTTY
https://www.chiark.greenend.org.uk/~sgtatham/putty/latest.html
e salviamo il file nella stessa cartella dove andremo a creare il nostro script .bat
Creiamo adesso il file di comandi .bat (chiamandolo ad esempio, plink_shutdown_qnap_nas.bat):
@echo off
set NAS_USER=admin
set NAS_IP=192.168.1.100
set NAS_PASS=YourPassword
plink.exe -batch -ssh %NAS_USER%@%NAS_IP% -pw %NAS_PASS% /sbin/poweroff
- Rimpiazziamo YourPassword con la password di admin del NAS QNAP. Nota: Questa soluzione di autenticazione espone la password in chiaro, il che rappresenta un rischio per la sicurezza.
- L’opzione “-batch” dice a Plink di non aspettare input interattivi. Ma se la chiave di crittografia del host QNAP non è ancora mai stata accettata e salvata nel computer Windows, il comando fallirà senza chiedere conferma. Perciò dobbiamo aver accettato la chiave almeno una volta prima di questo passaggio (vedi punto successivo) perché lo script funzioni.
- Plink potrebbe chiedere la prima volta che sarà eseguito di accettare la chiave digitale di crittografia SSH del NAS QNAP.
Per evitare il prompt “Press Enter to start session” con Plink, accettiamo manualmente la chiave di crittografia SSH di QNAP almeno una volta aprendo il prompt dei comandi di Windows e lanciando manualmente il comando Plink:
plink.exe -ssh admin@192.168.1.100 -pw YourPassword
Ci verrà chiesto di accettare la chiave host con un messaggio simile a:
The server’s host key is not cached in the registry. You have no guarantee that the server is the computer you think it is.
…
Store key in cache? (y/n)
Digitiamo y e premiamo il tasto “invio”. In questo modo la chiave verrà memorizzata nel computer Windows e Plink non ci chiederà più conferma nelle connessioni successive.
Note importanti
- La richiesta di premere il tasto “invio” è necessaria per l’accettazione della chiave di crittografia SSH di QNAP nel computer Windows.
- Dobbiamo accettare la chiave di crittografia SSH almeno una prima volta manualmente.
- Dopo aver accettato la chiave di crittografia SSH, possiamo usare l’opzione “-batch” nello script per evitare prompt interattivi che ne iterrompano l’esecuzione.
- Se la chiave di crittografia SSH di QNAP non è stata accettata e quindi salvata nel computer Windows, l’opzione “-batch” farà fallire il comando senza presentare alcun prompt. Per evitare ciò va quindi accetta la chiave di crittografia SSH prima che sia inserita nello script questa opzione.
Ricapitolando
- Il comando /sbin/poweroff è il modo standard per procedere con uno spegnimento sicuro di un NAS QNAP tramite SSH. Se si sta usando un’altra marca di NAS il comando andrà opportunamente modificato.
- Se si utilizza un account amministratore non predefinito, potrebbe essere necessario modificare con “sudo” i permessi, poiché alcuni modelli QNAP limitano i comandi di spegnimento all’amministratore principale.
- Per evitare di salvare la password all’interno dello script senza ricevere richieste di password al prompt, è altamente raccomandata l’autenticazione con chiave SSH sia per la sicurezza che per i vantaggi che offre.
In questo esempio di test abbiamo preferito evitare di trattare questa soluzione per rendere più semplice e immediato il raggiungimento dello spegnimento del NAS da remoto.
Usando altre tecniche di autenticazione è, infatti, possibile l’invio del comando di shutdown al NAS remoto senza necessità di salvare la password di admin all’interno del file batch.
Conclusioni
Quello su esposto vuole essere un esempio di utilizzo di scripting lato server di SiteBackup basato sugli eventi salvati nei Log di Windows. Da questo esempio il lettore può trarre spunto per la creazione di propri script diversi da quello qui presentato che, ribadiamo, ha finalità prettamente didattiche.
✅ Integrazione – Come creare uno script in cui non sia necessario scrivere la password dell’utente admin al suo interno
Nel caso desiderassimo utilizzare questo esempio in un ambiente operativo (e non di test) sarebbe meglio utilizzare uno script in cui non sia presente la password dell’utente admin al suo interno. Vediamo di seguito i passi necessari per la creazione di questo script alternativo.
🔧 Passo 1: Installiamo gli strumenti necessari
- Scarichiamo anche il PuTTY tools
puttygen.exe
sempre dal seguente link:
https://www.chiark.greenend.org.uk/~sgtatham/putty/latest.html - Salviamolo in una apposita cartella, es.
C:\Tools\PuTTY\
🔑 Passo 2: Generiamo una coppia di chiavi SSH
- Avviamo
puttygen.exe
- Clicchiamo su “Generate” e muoviamo il mouse per generare le chiavi
- Dopo la generazione:
- Clicchiamo su Save private key → Salvala come
qnap_shutdown_key.ppk
- Copiamo la chiave pubblica mostrata in alto nella finestra
- Clicchiamo su Save private key → Salvala come
📥 Passo 3: Aggiungiamo la chiave pubblica appena creata al NAS QNAP
- Abilitiamo SSH nel NAS (Pannello di controllo → Telnet/SSH → Abilita SSH).
- Colleghiamoci al NAS via SSH una volta con password (usando ad esempio il programma PuTTY scaricabile sempre dal link indicato in precedenza):
- Sul NAS, eseguiamo i seguenti comandi via SSH:
sostituendo "ssh-rsa AAAAB3..."
con la chiave pubblica appena generata, per aggiungerla a quelle già presenti nel file authorized_keys
📝 Passo 4: Creiamo lo script di spegnimento su Windows
Salviamo questo come shutdown_qnap.bat
:
@echo off
set QNAP_IP=192.168.1.100
set KEY_PATH=C:\Tools\PuTTY\qnap_shutdown_key.ppk
set PLINK_PATH=C:\Tools\PuTTY\plink.exe
%PLINK_PATH% -batch -ssh -i “%KEY_PATH%” admin@%QNAP_IP% “poweroff”
Modifichiamo l’IP e i percorsi secondo le nostre esigenze.
Il flag -batch forza in plink la modalità di funzionamento non interattiva.
🚀 Passo 5: Eseguiamo lo script
- Facciamo doppio clic su
shutdown_qnap.bat
oppure - Automatizziamolo con Utilità di pianificazione di Windows
🔐 Il grande vantaggio di questo secondo script è quello di non richiede che la password dell’utente admin sia scritta all’interno dello stesso, offrendo così un maggior livello di sicurezza.