#!/bin/bash # Выгрузка бэкапа ru1 для rpi. Forced command в ~mik/.ssh/authorized_keys: # restrict,command="sudo -n /usr/local/sbin/backup-export" <ключ server-backup@rpi> # В stdout — tar | zstd | age (открытый ключ; закрытый только у владельца вне малины). # В stderr последней строкой — "SHA256 " шифротекста. # Главное здесь — ~mik/easy-rsa: CA OpenVPN; без него — перевыпуск всех клиентских конфигов. set -euo pipefail PUB=age1qfsgzyglv0vmq4kskg888hzgq032mry5kxz9kptkvzsrz0fz0v7q6kxwk2 tmp=$(mktemp -d /tmp/backup-export.XXXXXX); trap 'rm -rf "$tmp"' EXIT cd / # tar exit 1 = «файл изменился при чтении» — не ошибка { rc=0; tar --numeric-owner --ignore-failed-read --warning=no-file-changed -cf - \ --exclude=home/mik/badvpn --exclude=home/mik/telemt-build --exclude=home/mik/cloudflared.deb \ --exclude=home/mik/.claude --exclude=home/mik/.cache --exclude='home/mik/*.log' --exclude=home/mik/nohup.out \ etc opt srv usr/local home/mik root var/spool/cron 2>/dev/null || rc=$?; [ $rc -le 1 ] || exit $rc; } \ | zstd -3 -T0 -q | /usr/local/bin/age -r "$PUB" | tee >(sha256sum > "$tmp/sum") # процесс-подстановка живёт отдельно от конвейера — ждём, пока sha256sum допишет итог for _ in $(seq 300); do [ -s "$tmp/sum" ] && break; sleep 0.1; done echo "SHA256 $(cut -d' ' -f1 "$tmp/sum")" >&2