Quando si ha la necessità di passare diversi files da un pc ad un altro con una certa frequenza (magari tra due pc di casa o da casa all’ufficio), può essere utile avere uno script che faccia tutto questo in modo rapido e senza dovere inserire ogni volta la password del computer remoto. Questo script accetta uno o più files o cartelle come parametro ma non accetta nomi che contengono spazi bianchi. Bisogna soltanto modificare le variabili definite all’inizio e installare il pacchetto expect sull’host locale.
$ sudo apt-get install expect
Inoltre bisogna anche avere il pacchetto openssh-server installato sull’host remoto dato che questo script fa uso di scp e, ovviamente, un utente valido.
Ecco il codice:
#!/bin/bash
############################################################
remote_user=”corrob” # utente sull’host remoto
remote_host=”192.168.0.4″ # host remoto
remote_path=”~/Desktop” # percorso sull’host remoto
pwd=”tua_password” # password dell’utente sull’host remoto
############################################################
if [ $# -lt 1 ]
then
echo “Usage: $0 richiede almeno un file come argomento”
exit
fi
for i in $*
do
if [ -d $i ]
then
par=-r
elif [ -f $i ]
then
par=”"
else
echo “$i: No such file or directory”
continue
fi
expect -c “spawn /usr/bin/scp $par $i $remote_user@$remote_host:$remote_path” -c ‘expect *password*’ -c “send — $pwd\r” -c ‘expect “*100%*\r”‘ -c expect -c ‘wait’ 2> /dev/null
done
Una volta copiato il contenuto incollatelo in un file in /usr/src e date a tutti i permessi di lettura ed esecuzione.
$ sudo chmod 555 /usr/bin/nomescript
Io l’ho chiamato mybackup. Adesso configurate le 4 variabili all’inizio dello script in modo da contattare il vostro host remoto per il backup.
Infine utilizzate lo script in questo modo:
$ mybackup file1 file2 file3
Nota: è necessario avere effettuato l’accesso in ssh all’host remoto almeno una volta altrimenti vi verrà chiesto di autenticare l’host e lo script non funzionerà. Assicuratevi perciò di avere la chiave nel file ~/.ssh/know_hosts.