Vzdálená záloha pomocí SSH a RSYNC

Nejprve vytvoříme pomocí SSH šifrovaný tunel mezi dvěma počítači na bázi klient/server. Přes něj můžeme přistupovat k shellu vzdáleného počítače, ale také kopírovat soubory, spouštět vzdáleně aplikace, vytvářet roury z místního počítače na vzdálený či vytvářet šifrované tunely pro vzdálený přístup k nějaké službě, která je za firewallem. Tohoto využijeme k záloze výstupu z aplikace nebo k záloze části filesystému.

Pro správnou funkci tohoto skriptu musíme vytvořit systémového uživatele na vzdáleném serveru, pod kterým budeme vytvářet zálohy. Pro tohoto uživatele vygenerujeme public/private pár klíčů a public klíč umístíme do jeho domovského adresáře.

#!/bin/bash
COMMAND_01="/usr/bin/mysqldump -u Zaloha --password=Zaloha --opt --all-databases"
COMMAND_02="/usr/bin/pg_dumpall -U postgres"
SOURCE_HOST="server.domena"
SOURCE_DIR="/etc"
USER="zaloha"
MY_DATE=`date +%Y%m%d-%H%M%S`
DESTINATION_DIR="/tmp/zaloha"
DESTINATION_FILE_01="$DESTINATION_DIR/$MY_DATE-mysql-export.sql"
DESTINATION_FILE_02="$DESTINATION_DIR/$MY_DATE-postgres-export.sql"

if [ ! -d $DESTINATION_DIR ] ; then
     mkdir -p $DESTINATION_DIR
fi


#zalohy vystupu z binarky
ssh -o NumberOfPasswordPrompts=1 -o PasswordAuthentication=no -o StrictHostKeyChecking=no $USER@$SOURCE_HOST "$COMMAND_01" > $DESTINATION_FILE_01
ssh -o NumberOfPasswordPrompts=1 -o PasswordAuthentication=no -o StrictHostKeyChecking=no $USER@$SOURCE_HOST "$COMMAND_02" > $DESTINATION_FILE_02
#zaloha FS
rsync -zavR -e "ssh -o NumberOfPasswordPrompts=1 -o PasswordAuthentication=no -o StrictHostKeyChecking=no" --delete $USER@$SOURCE_HOST:$SOURCE_DIR $DESTINATION_DIR