Heute möchte ich mein einfaches „Backup-Script“ für Linux-Rechner vorstellen. In meinem Szenario muss ich eine MySQL-Datenbank und ein paar Verzeichnisse sichern. Die Sicherungskopie möchte ich dann verschlüsseln und auf einen anderen Rechner laden.
Zunächst logge ich mich auf dem Rechner ein, auf dem ich Daten sichern will. Wenn ich noch keinen öffentlichen SSH-Schlüssel habe, lege ich einen neuen an (kein Passwort für den Schlüssel vergeben!):
ssh-keygen -t rsa
Diesen kopiere ich dann auf den Rechner, der die Sicherungskopien speichern soll:
ssh-copy-id benutzer@backup.agrafix.net
Nun lege ich eine neue Datei an, die den Verschlüsselungsschlüssel enthält:
openssl rand -base64 512 > key.txt
Jetzt zum eigentlichen Script:
#!/bin/bash today=$(date +"%Y_%m_%d") # CONFIG mail="mail@agrafix.net" keyFile="$HOME/key.txt" backtarget="benutzer@backup.agrafix.net:a01/${today}.tar.gz" backup=( "$HOME" "/var/www" ) mysqlUser="mysqluser" mysqlPass="mysqlpass" mysqlDb=( "mysqldb" ) # END CONFIG dir=`mktemp -d` target="/tmp/${today}_back.tar.gz" for db in "${mysqlDb[@]}" do echo "Backing up mysql to ${dir}/${db}.sql to ${db}.sql" mysqldump -u $mysqlUser -p"$mysqlPass" $db > "${dir}/${db}.sql" done for d in "${backup[@]}" do backupName=${d////_} echo "Backing up ${d} to ${backupName}.tar.gz" tar --ignore-failed-read -f "${dir}/${backupName}.tar.gz" -cz $d done echo "Compressing everything to ${target}" tar cfz - $dir | openssl enc -aes-256-cbc -kfile $keyFile -e > $target echo "Done. Now uploading ${target} to backup machine ${backtarget}" scp "${target}" "${backuptarget}" echo "Deleting local backup" rm -f $target rm -rf $dir echo "Sending email" echo "Backup complete! ${today}" | mail -s 'Backup completed' $mail echo "Okay! :-)"
Um ein Backup wieder einzuspielen, muss die entsprechende .tar.gz Datei zurück kopiert werden, und kann dann mit
openssl enc -in $1 -kfile key.txt -aes-256-cbc -d | tar -zxvf -
entpackt werden.