bash script for performing incremental backups.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
david c9a32d3899 Update 5 years ago
LICENSE Added license 6 years ago Update 5 years ago
sshbackup some final changes to oh_four 8 years ago


sshbackup is a bash script for doing incremental backups. it creates as many incremental versions of a folder as you wish for and it does that with local folders as well as with remote folders.


sudo wget -O /usr/bin/sshbackup
sudo chmod +x /usr/bin/sshbackup


usage: sshbackup <options> [[user@]server:]/source/path /destination/path [versions]

   -h, --help                show this message
   -v, --version             version information

   -l, --list <file>         list of sources and destinations
   -c, --config <file>       alternate config file [~/.sshbackup]
   -s, --sshkey <file>       alternate sshkey [~/.ssh/id_rsa]
   -b, --bandwidth <kbps>    bandwidth limit in kbit/s

   -d, --deploy              deploy settings to remote host
   -n, --no-root             run without root privileges


for doing reoccuring backups utilize cron to do the job. type:

sudo crontab -e

and create cronjob(s) like following:


#m h  dom mon dow   command
0 2      * * *      sshbackup /path/to/source /path/to/destination 5
0 3      * * *      sshbackup -s /path/to/sshkey -l /path/to/listfile
0 4      * * *      sshbackup bkpuser@server:/path/to/source /path/to/destination 30


utilize crons MAILTO directive for getting error notifications.


for automated backups configure a sshkey for the root user and configure your remote machines to trust that key.

sudo su
ssh-copy-id <remote machine>

you must add the backupuser to /etc/sudoers on your remote servers as well to make automated backups work. type:

sudo visudo #this will open /etc/sudoers in a texteditor

and add following at the end of that file:

backupuser ALL=(root)NOPASSWD: /usr/bin/rsync

all of this can be done by sshbackup automatically. (a key pair will be generated if none is found and for deploying remote settings use the --deploy switch)


you can use a listfile (-l|--list) which should have a source/destination combination each line. example listfile:

#<source> <destination> [<versions>] /home/david/Downloads/devhome 30 /home/david/Downloads/gollum
/home/david/something /home/david/backup 5


an example config with default values looks like this.

#rsync options.
rsyncoptions="-pogEthrzl --numeric-ids --no-motd"
#dotglob option removes bug while rsyncing folder with no visible files in it.
remotecmd="shopt -s dotglob; /usr/bin/sudo /usr/bin/rsync"
#default versions


this should be a little overview of what's coming..

+--- version 0.3.1
+--- better error output
+--- check missing dependencies
+--- automatic sshkey creation
+--- bandwidth limits
+--- remote settings deployment
+--- move documentation to sudo crontab -e
+--- root privileges optional
+--- version 0.4.0
|                    O/
|                   /|
+--- You are here   / \
+--- install missing dependencies automatically
+--- check if process is still running
+--- version 0.4.1

(roadmap is inspired by