[ale] rsync + ssh + cron

Nathan J. Underwood ale1 at cybertechcafe.net
Tue May 23 12:55:49 EDT 2006


I'm trying to come up with a script to do remote backups with rsync + 
ssh + cron.  I got the idea initially from a couple of articles and 
based mine on this one -> 
http://www.mikerubel.org/computers/rsync_snapshots/ (sortof).  At any 
rate, I'm having trouble getting the script to connect to a remote 
computer via rsync using SSH.  To test, I can echo the command line 
being sent by the script and copy + paste it and run it with no errors, 
but I just can't run it from the script. 

Environment :
rsync v2.6.8
openssl v0.9.7a-40


I have a user setup to log in using rsa keys with no passphrase and have 
tested to make sure this works (i.e. log into the destination box from 
the source box via ssh using this username and I am not prompted for a 
password / passphrase).

I've been googling for a couple of hours trying to avoid the 'rtfm' 
response and have found a couple that indicate that my script *should* 
work but I'm still missing something.

Below is the script:

#!/bin/bash
# version 0.01a
#
# snapshot2.sh - This will use rsync to backup the files in SOURCE
#
# Dependancies:
# rsync - last tested with v2.6.8
# openssl - last tested with v0.9.7a-40
# ssh login with RSA keys with no pw
#
# CREDITS
# This script uses some of the concepts and ideas from Mike Rubel's 
script at http://www.mikerubel.org/computers/rsync_snapshots/

configFile=                     # if you wish to put all of these 
configs in a separate file,
                                # enter the full filesystem path to it 
here (all other configs
                                # will be ignored)
srcLoc="/home/nathan/source/"    # full filesystem path to the files 
being backed up
srcHost=""                      # hostname or IP address of host with 
source.  leave blank for local
srcUserName="nathan"            # username on source system (not req if 
local)
dstLoc="/home/nathan/destination"            # full filesystem path to 
the backup destination
dstHost="lint-1"             # hostname or IP address of host to backup 
to.  leave blank for local
dstUserName="nathan"            # username on dest system (not req if local)
method="/usr/bin/ssh -p 2201"            # this will be used for the -e 
argument to rsync
preFlags="-av"                  # any flags / arguments to be added to 
the beginning of the backup script
postFlags="--progress --stats --compress --delete"  # any flags / 
arguments to be added to the end of the backup script
numOfHist="4"                   # how many old copies to keep



#------------------------------------------
# no tinkering beyond this point
#------------------------------------------

PATH="$PATH:/usr/bin"
# Get Commands
RSYNC=$(which rsync)            # rsync
CP=$(which cp)                  # cp (copy)
MV=$(which mv)                  # mv (move)
ID=$(which id)                  # id
ECHO=$(which echo)              # echo
SSH=$(which ssh)                # ssh

# Check to make sure that this is being ran by root
#if (( `$ID -u` != 0 )); then
#    { $ECHO "Sorry, must be root.  Exiting..."; exit; }
#fi


#------------------------------------------
# Build rsync command to be ran
#------------------------------------------
#rsync -av -e 'ssh -p 2201' ../source/ nathan at linux-fs2:destination 
--progress --stats --compress --delete --link-dest=destination.1

# Get flags to be added before the source
if [ -n "$preFlags" ]; then
    PREFLAGS=" $preFlags";
fi

# Get the method
if [ -n "$method" ]; then
    METHOD=" -e '$method'"
fi

# Setup the source.  Check for a source host (i.e. the source is another 
computer) and, if one is there, verify
# that a source username has been added.
if [ -n "$srcHost" ]; then
        if [ -z "$srcUserName" ]; then
            $ECHO "Sorry, source host specified but no source username.  
Exiting..."; exit;
        else
            SRC="$srcUserName@$srcHost:$srcLoc"
        fi
    else
        SRC="$srcLoc"
fi

# Setup the destination.  Check for a destination host (i.e. the 
destination is another computer) and, if one is there, verify
# that a destination username has been added.
if [ -n "$dstHost" ]; then
        if [ -z "$dstUserName" ]; then
            $ECHO "Sorry, destination host specified but no destination 
username.  Exiting..."; exit;
        else
            DST="$dstUserName@$dstHost:$dstLoc"
        fi
    else
        DST="$dstLoc"
fi

#if [ "$postFlags" ]; then
#    POSTFLAGS= " $POSTFLAGS";
#fi

COMMAND="$RSYNC $PREFLAGS $METHOD $SRC $DST $POSTFLAGS"


echo $COMMAND
$COMMAND
-------------- next part --------------
An HTML attachment was scrubbed...




More information about the Ale mailing list