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 che è tuttora pubblicato alla seguente pagina di questo sito
In questo nuovo articolo, invece, andremo 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 del mattino, SiteBackup effettui una replica dei file del “repository” principale su un NAS QNAP, collegato in fibra ottica in un locale piuttosto distante.
Dato che il 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 prefissato, 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.
Il momento ideale di spegnimento del NAS QNAP dovrebbe essere quindi l’istante successivo al termine della sincronizzazione della replica appena effettuata da SiteBackup.
Per ottenere ciò, sfrutteremo gli eventi registrati da SiteBackup nel Registro Eventi di Windows che sono aggiunti ad ogni completamento della replica avvenuta con successo e che useremo per eseguire, tramite il Gestore degli Eventi Programmati di Windows, lo script che invierà un comando di spegnimento al NAS QNAP da remoto.
Per individuare l’evento “sincronizzazione della replica terminata” 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 nel registro eventi di Windows un evento contente una particolare stringa o un particolare ID, possiamo sfruttare il Task Scheduler di Windows configurandolo con un meccanismo che monitori il registro degli eventi di 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 nella descrizione dell’evento.
- 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 che avevamo individuato prima nel Registro Eventi di Windows (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 tutto prima di uscire.
Se vogliamo ora controllare che effettivamente al verificarsi dell’evento sia eseguita l’azione appena impostata, possiamo attivare la cronologia dell’esecuzione degli script nell’ 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
⚙️ Creazione dello 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 dal computer Windows. 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).
📝 Comandi dello script per lo spegnimento di QNAP da Windows
Usiamo Plink (PuTTY Command-Line Tool) per rendere più semplice il test di funzionamento dello script rispetto ad altre soluzioni più “sicure” che necessiterebbero però di qualche configurazione in più per svolgere la stessa funzione (cfr. la seconda parte del presente articolo).
Scarichiamo la versione di plink.exe più adatta al nostro sitema operativo 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) composto dalle seguenti righe:
@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ù alcuna 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 (cfr. la seconda parte del presente articolo).
In questo esempio di test abbiamo preferito evitare di trattare questa tecnica di autenticazione per rendere più semplice e immediato il raggiungimento dello spegnimento del NAS da remoto.
Nella a seconda parte del presente articolo spiegheremo proprio come sia possibile l’invio del comando di shutdown al NAS remoto senza la 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.
– Seconda parte –
🎯 Come creare uno script in cui non sia necessario scrivere in chiaro 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 in chiaro 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, che usa SSH con autenticazione a chiave asimmetrica, è quello di non richiedere che la password dell’utente admin sia scritta in chiaro all’interno dello stesso script, garantendo così un maggior livello di sicurezza.
💡 Suggerimento addizionale per l’esecuzione dello script in presenza di Windows Defender
In alcune circostanze potrebbe essere necessario escludere la cartella dello script dalla scansione di Windows Defender per evitare che appaia il pop-up di dialogo con scritto “Avviso di sicurezza di Windows: Gli script sono solitamente sicuri. Consentire l’esecuzione?”.
In questo caso procediamo con le seguenti ulteriori impostazioni per evitare il pop-up.
- Apriamo Sicurezza di Windows (cliccando sull’icona dello scudo nella barra delle applicazioni o cercando “Sicurezza di Windows” nel menu Start).
- Selezioniamo Protezione da virus e minacce.
- Clicchiamo su Gestisci impostazioni sotto Impostazioni di protezione da virus e minacce.
- Scorriamo verso il basso e selezioniamoe Aggiungi o rimuovi esclusioni sotto Esclusioni.
- Clicchiamo su Aggiungi un’esclusione e scegliamo il tipo di esclusione (es. file, cartella, tipo di file, processo).
- Selezioniamo la cartella che contiene il nostro script in modo che sia esclusa dalla scansione e controllo di Windows Defender.
🚧 – Terza parte (in costruzione) – 🚧
🎯 Creazione dello script per lo spegnimento di un NAS Synology
Volendo fare la stessa cosa con un NAS Synology cambia pochissimo nel meccanismo di base su esposto, perché anche i NAS Synology girano su Linux e supportano SSH.
La differenza principale è il comando di spegnimento e come abilitare SSH sul Synology.
⚙️ Abilitazione SSH
Andiamo su Pannello di Controllo → Terminale & SNMP → Terminale e spuntiamo Abilita servizio SSH.
⏻ Spegnere via SSH il NAS Synology:
Sul Synology, i comandi validi per spegnere sono:
sudo poweroff
oppure
sudo shutdown -h now
💡 Nota:
Synology richiede sudo
anche per utente admin
, perciò dovremo anche configurare l’utente per eseguire sudo
senza password.
⚙️ Configurare sudo
senza password:
Accediamo al Synology via SSH come admin
e modifichiamo il file /etc/sudoers
:
sudo visudo
Poi aggiungiamo:
admin ALL=(ALL) NOPASSWD: /sbin/poweroff, /sbin/shutdown
💡 Ora admin
potrà eseguire sudo poweroff
senza inserire la password.
📝 Script shutdown_synology.bat
su Windows:
@echo off
set SYNO_IP=192.168.1.200
set KEY_PATH=C:\Tools\PuTTY\syno_shutdown_key.ppk
set PLINK_PATH=C:\Tools\PuTTY\plink.exe
%PLINK_PATH% -batch -ssh -i “%KEY_PATH%” admin@%SYNO_IP% “sudo poweroff”
Dove:
SYNO_IP
è l’IP del Synology.KEY_PATH
è la tua chiave privata generata con puttygen.sudo poweroff
spegne il NAS.
Piattaforma | Comando spegnimento | Sudo necessario? | Configurazione speciale |
---|---|---|---|
QNAP | poweroff |
❌ (come root di default) | Nessuna |
Synology | sudo poweroff |
✅ (sudoers NOPASSWD) |
Abilitare SSH + sudoers |
⚠️ Nota di sicurezza:
Se preferiamo non modificare sudoers, potremmo anche scrivere la password in chiaro nel comando echo password | sudo -S poweroff
ma, data la falla di sicurezza che ne conseguirebbe, suggeriamo di adottare questa soluzione solo in ambiente di test.