Easy Rsync Remote Backups Using SSH Keys
Wednesday, March 19th, 2008Rsync is an excellent file transfer utility thats especially well suited for backing up files over the Internet because it only transfers the data that has changed. A friend asked me how to set it up, so I thought I’d post what I sent him here.
Goal: Backup a directory from computer Zim to computer Ark
Details:
- Both
ZimandArkare subdomains ofexample.com - The user on
Arkwhich receives the backup files is namedbackupuser - The user on
Zimwith access to the files you want to backup is namedsteve
Prerequisites:
- Login to
Zimviassh:ssh steve@zim.example.com
- Generate a
sshkey pair using:ssh-keygen -t rsa <press enter when prompted where to save the key> <press enter twice when asked for a passphrase>
- To use the key to login to
Arkremotely without manually entering a password you need to copy the public key fromZimtoArkusing:ssh-copy-id -i .ssh/id_rsa.pub backupuser@ark.example.com
If you don’t have
ssh-copy-idon your system, get a new system.
If thats not possible you can download the script with:wget -O ssh-copy-id http://cvsweb.mindrot.org/index.cgi/~checkout~/openssh/contrib/ssh-copy-id?rev=1.6;content-type=text%2Fplain && chmod +x ssh-copy-id
Then retry the above command only you’ll need to prepend a “./”:
./ssh-copy-id -i .ssh/id_rsa.pub backupuser@ark.example.com
- Verify the key copied properly by attempting to login to
Ark. You should not be prompted for a password:ssh backupuser@ark.example.com
- Logout of
Ark. The key is setup, so you’re now ready to rsync files without having to manually enter a password. - Test rsync by choosing a small file to backup and using:
rsync -tP /some/small/testfile backupuser@ark.example.com:/tmp
A nice little progress bar should be displayed as the file is transferred. Confirm that “testfile” is now in
/tmponArk. - You’re finally ready to do a real rsync like:
rsync -t /directory/to/backup/* backupuser@ark.example.com:/existing/backup/directory
Note: There are several useful options for rsync. Check
man rsyncto find out more.-p— preserve permissions (useful for backups, use -E if you only care about the executable bit)-r— recursively backup directories.-z— compressed uncompressed files- And just FYI:
-ttells rsync to use the last modified timestamp to determine whether or not to transfer files. It makes rsync a lot faster at determining whether or not files have changed.
- To schedule the backup to take place nightly at 1:13 AM edit your crontab using
crontab -eand insert the following line:13 1 * * * rsync -qt /directory/to/backup/* backupuser@ark.example.com:/existing/backup/directory
Caveats:
- These instructions will push files from
ZimtoArk. There’s no reason whyArkcouldn’t pull files fromZim. In fact, this is often more secure ifZimis a web server with a larger attack surface thanArk. Mea culpa. - If the IP address of
Arkis dynamic, use a service like dyndns.com. Otherwise SSH will give you errors. - Major security warning: If someone breaks into
Zim, they can also delete all of your backups onArk. Never ever ever use therootuser for backups onArk. You can use therootuser onZimto send the backups, but its best to have a special backup user setup onArkto receive the backup.
