Резервное копирование KBackups

Создаем нужный контейнер в selectel, далее создаем ссылку для загрузки, в настройках, выставляем пароль, добавляем время загрузки к файлу, отключаем веб интерфейс. Время жизни тут задавать не надо, иначе ссылка на загрузку тоже будет удаляться...

Создаем файл /etc/cron.weekly/backup

#!/bin/bash

declare -A BACKUP
declare -A BACKUP_EXCLUDE

# Список каталогов для резервирования через пробел
BACKUP[base]="/etc /srv"
# Если нужно исключить какие то каталоги заносим их в этот массив
BACKUP_EXCLUDE[base]="/etc/shadow etc/shadow-"
# URL на котором висит сервис
BACKUP_SERVER_URL=host:port/upload
# Пароль
BACKUP_SERVER_PASS=pass
# Пароль на архив
ARCHIVE_PASS=archive-pass
# Название файла
BACKUP_NAME=`hostname`
# Указываем путь к скрипту телеграм, если не указан результаты будут выведены на экран.
TELEGRAM_PATH=/srv/scripts/send_notify.sh

cd /var/backups/

send_message () {
    if [ -z "${TELEGRAM_PATH}" ]; then
        echo $1
    else
        `echo $1 | ${TELEGRAM_PATH}`
    fi
}

function get_excludes () {
    RES=""
    if [[ -v "BACKUP_EXCLUDE[$1]" ]] ; then
        for i in ${BACKUP_EXCLUDE[$1]}; do
            RES="${RES} --exclude $(remove_slash $i)"
        done
    fi
    echo ${RES}
}

function remove_slashes_from_str () {
    RES=""
    for i in $1; do
        RES="${RES} $(remove_slash $i)"
    done

    echo ${RES}
}

function remove_slash () {
    echo $(echo "$1" | sed 's:^/::g' | sed 's:/$::g')
}

for key in ${!BACKUP[@]}
do

    NAME=${BACKUP_NAME}-${key}-`/bin/date +%Y-%m-%d`.tgz.enc
    FILE=/var/backups/$NAME

    tar  -C / $(get_excludes $key) -c $(remove_slashes_from_str "${BACKUP[$key]}") | pigz | openssl enc -e -aes-256-cbc -pbkdf2 -k ${ARCHIVE_PASS} -out ${FILE}

    exit_status=`curl -o /dev/null  -s -w "%{http_code}\n" --write-out "%{http_code}\n"  -i -XPUT ${BACKUP_SERVER_URL} -H "X-Filename: ${NAME}"  -H "X-Auth-Token: ${BACKUP_SERVER_PASS}" -T $FILE`

    if [ $exit_status -ne 200 ]; then
        send_message "Error backup on ${key}"
#    else
        # send_message "Good backup on ${key} `du -sh $FILE| awk '{ print $1 }'`"
    fi

    rm -f $FILE
done

Выставляем права
chmod 700 /etc/cron.weekly/backup

curl умеет грузить файлы не более 5 гигабайт!

Для распаковки используем команду

openssl enc -d -aes-256-cbc -pbkdf2 -in archive.tgz.enc |pigz -d |tar -x

[ Править ]

@kiranananda