[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