h1

Script per backup remoto

settembre 28, 2007

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.

Annunci

7 commenti

  1. ti ricordo che gli apici sono quelli normali ‘ e non quelli “strani” ` questo piccolo dettaglio mi ha fatto sudare parecchio.. ma alla fine ci sono riuscito 😀


  2. Si infatti sono gli apici singoli.. 🙂 Il problema è che l’editor di wordpress non funziona molto bene e quando si fa il copia e incolla dello script alcuni caratteri non vengono ben interpretati. Provvederemo, 😉


  3. Ciao,
    ho creato uno script “BASH/SHELL” per effettuare diversi tipi di BACKUP (MYSQL, POSTGREE, ecc) su un server privato di tutti i server pubblici attraverso semplici file di configurazione.

    Per l’appunto non riuscivo a trovare una soluzione veloce per backuppare N CARTELLE di tutti i server pubblici senza dover mettere mano ai SERVER REMOTI.

    Tipo aggiungere lo stesso utente su tutte le macchine e copiarmi la chiave ssh e via dicendo.

    Questo tuo tutorial mi ha dato la soluzione che cercavo, adesso riesco a fare il backup delle cartelle ma sono incappato in un problema strano, dopo circa dieci secondi dall’esecuzione del SCP il programma si blocca.

    Leggendo un po’ in giro mi sembra di aver capito che potrebbe essere un problema di TIMEOUT di EXPECT.

    Dopo diversi tentavi, non sono ancora riuscito a trovare il comando da settare ad EXPECT per aumentare il timeout..

    Hai la minima idea di come fare, ma soprattutto tu non hai riscontrato questo problema??

    (Versione di Expect 5.43 per Debian 4.0 Etch.)


  4. Ho trovato la soluzione, basta aggiungere:

    -c “set timeout -1\r”

    prima del comando scp.

    Grazie lo stesso.

    Compliementi per il tutorial.

    😉


  5. Ciao,
    strano, io non ho ricontrato questo problema ma se mi dovesse capitare grazie per la dritta…:)
    Comunque mi fa piacere sapere che lo script sia stato d’aiuto a qualcuno 😉


  6. in che pacchetto è il comando spawn? non riesco a trovarlo


    • Lo spawn è un opzione:
      I campi di opzione permettono alle regole d’accesso di lanciare i comandi della shell attraverso le seguenti direttive:

      *

      spawn — Lancia un comando della shell come programma figlio. Questa opzione pu� effettuare dei compiti come ad esempio usare /usr/sbin/safe_finger per ottenere pi� informazioni inerenti il client richiedente, o creare file di registrazione speciali usando il comando echo.

      Nel seguente esempio, i client che cercano di accedere ai servizi Telnet dal dominio example.com sono registrati su di un file speciale:

      in.telnetd : .example.com \
      : spawn /bin/echo `/bin/date` from %h>>/var/log/telnet.log \
      : allow
      cmq se nn lo trovi, dovresti scaricare il pacchetto except e vedere se lo trovi, ovviamente nn dovresti poterlo usare un semplice demone.



Rispondi

Inserisci i tuoi dati qui sotto o clicca su un'icona per effettuare l'accesso:

Logo WordPress.com

Stai commentando usando il tuo account WordPress.com. Chiudi sessione / Modifica )

Foto Twitter

Stai commentando usando il tuo account Twitter. Chiudi sessione / Modifica )

Foto di Facebook

Stai commentando usando il tuo account Facebook. Chiudi sessione / Modifica )

Google+ photo

Stai commentando usando il tuo account Google+. Chiudi sessione / Modifica )

Connessione a %s...

%d blogger hanno fatto clic su Mi Piace per questo: