Scheduling di uno script robocopy su shares di rete con autentificazione

network-share-password-protected

In questi giorni ho avuto la necessità di dover copiare dei dati da una share di rete di una sede ad un'altra, entrambe le share necessitano di credenziali per accedervi ed entrambe le sedi sono collegate tramite una VPN. Non dovevo assolutamente fare un mirroring delle due share, in quando sulla share di destinazione erano presenti dati non presenti sull'altra, dati ovviamente che non potevano essere cancellati durante la procedura di sincronizzazione.

Come fare? Molto semplice, prendiamo un bel frullatore (magari un BlendTec) e ci mettiamo dentro robocopy, net use e lo scheduler di Windows. 😉

Ammetto che la cosa poteva essere fatta facilmente con una script powershell, magari integrano anche le notifiche mail ma io ho intrapreso la "quick and dirty way". =)

L'idea di base è quindi di usare net use per autentificarsi sulle due share, robocopy per il trasferimento di dati e ovviamente lo scheduler per schedulare l'operazione.

Note dolenti...
Una share di rete protetta necessita appunto di una username e una password per potervi accedere, e il prompt non accetta password cifrate. Penso abbiate capito dove voglio arrivare 😀
Password in chiaro =(
Tramite PowerShell molto probabilmente si può passare la password in maniera criptata e quindi non in chiaro. Se la sicurezza è un must per voi potete sempre limitare il danno creando un utente specifico con diritti di lettura e scrittura solo sulla share in questione, e nessun diritto altrove. In questo modo anche essendo in chiaro il possibile danno è circoscritto solo ad un unica share di rete. Vi dirò che nel caso i dati copiati non sono per nulla dati sensibili e quindi anche la password è in chiaro sul sistema server che esegue lo script la cosa non mi disturba per niente.

In Linux, nel caso si effettui un mount di rete, ad esempio si può rendere leggermente più sicura la cosa inserendo le credenziali per il login in un file e poi modificare i permessi di quel file, in modo che solo il proprietario possa accedervi. Invece che lasciare in chiaro le credenziali nel file /etc/fstab.

Questo è lo script, copiate e incollatelo in un nuovo file e salvatelo con estensione .bat.

@ECHO OFF
rem copy contents of shareA into shareB
rem set credentials
net use \\192.168.1.10\shareA /user:user pwd
net use \\192.168.2.10\shareB /user:user pwd

rem copy, without mirroring
robocopy \\192.168.25.8\shareA \\192.168.2.5\shareB /e

rem remove credentials
net use \\192.168.1.10\shareA /D
net use \\192.168.2.10\shareB /D

Dovete ovviamente compilare parecchi campi. Dovrete inserire gli indirizzi IP corretti, il nome delle condivisioni e infine nome utente e password degli utenti che hanno diritti in lettura per la shareA e in scrittura per shareB.

Fatto questo potete schedulare il bat tramite lo scheduler di sistema. Qui potrete impostare il trigger che fa scattare l'esecuzione dello script. Mi raccomando di mettere la spunta sull'opzione "Esegui indipendentemente dalla connessione degli utenti". In questo caso anche se il PC è nella schermata di login con nessun utente connesso l'azione partirà.