Напиши Bash-скрипт для автоматического создания бэкапа папки config и отправки его на удаленный SFTP-сервер.
Ниже представлен полноценный Bash-скрипт, который:
1. Создаёт архив папки `config` с временной меткой.
2. Отправляет архив на удалённый SFTP-сервер.
3. Удаляет локальный архив после успешной отправки.
4. Логирует все действия.
—
**Скрипт `backup_config.sh`:**
bash
#!/bin/bash
# ========================
# Настройки
# ========================
SOURCE_DIR=»/path/to/config» # Папка для бэкапа
BACKUP_DIR=»/tmp/backups» # Временная папка для архивов
SFTP_HOST=»sftp.example.com» # Хост SFTP-сервера
SFTP_USER=»sftp_user» # Пользователь SFTP
SFTP_PORT=»22″ # Порт SFTP
SFTP_REMOTE_DIR=»/backups/config» # Удалённая папка на SFTP
SSH_KEY=»/home/user/.ssh/id_rsa» # Путь к приватному SSH-ключу
LOG_FILE=»/var/log/backup_config.log» # Лог-файл
RETENTION_DAYS=7 # Хранить бэкапы N дней
# ========================
# Функция логирования
# ========================
log() {
echo «[$(date ‘+%Y-%m-%d %H:%M:%S’)] $1» | tee -a «$LOG_FILE»
}
# ========================
# Подготовка
# ========================
mkdir -p «$BACKUP_DIR»
TIMESTAMP=$(date ‘+%Y%m%d_%H%M%S’)
ARCHIVE_NAME=»config_backup_${TIMESTAMP}.tar.gz»
ARCHIVE_PATH=»${BACKUP_DIR}/${ARCHIVE_NAME}»
log «Начало резервного копирования папки: $SOURCE_DIR»
# ========================
# Создание архива
# ========================
if tar -czf «$ARCHIVE_PATH» -C «$(dirname «$SOURCE_DIR»)» «$(basename «$SOURCE_DIR»)»; then
log «Архив успешно создан: $ARCHIVE_PATH»
else
log «ОШИБКА: Не удалось создать архив!»
exit 1
fi
# ========================
# Отправка на SFTP
# ========================
log «Отправка архива на SFTP: ${SFTP_HOST}:${SFTP_REMOTE_DIR}»
sftp -i «$SSH_KEY»
-P «$SFTP_PORT»
-o StrictHostKeyChecking=no
-o BatchMode=yes
«${SFTP_USER}@${SFTP_HOST}» <<EOF
mkdir ${SFTP_REMOTE_DIR}
put ${ARCHIVE_PATH} ${SFTP_REMOTE_DIR}/${ARCHIVE_NAME}
bye
EOF
if [ $? -eq 0 ]; then
log "Архив успешно отправлен на SFTP."
else
log "ОШИБКА: Не удалось отправить архив на SFTP!"
exit 2
fi
# ========================
# Удаление локального архива
# ========================
rm -f "$ARCHIVE_PATH"
log "Локальный архив удалён: $ARCHIVE_PATH"
# ========================
# Очистка старых бэкапов на SFTP (опционально)
# ========================
log "Удаление бэкапов старше ${RETENTION_DAYS} дней на SFTP…"
ssh -i "$SSH_KEY" -p "$SFTP_PORT" -o StrictHostKeyChecking=no
"${SFTP_USER}@${SFTP_HOST}"
"find ${SFTP_REMOTE_DIR} -name 'config_backup_*.tar.gz' -mtime +${RETENTION_DAYS} -delete"
log "Резервное копирование завершено успешно."
exit 0
—
**Как использовать:**
1. Сохраните скрипт: `nano backup_config.sh`
2. Дайте права на выполнение: `chmod +x backup_config.sh`
3. Запустите вручную: `./backup_config.sh`
4. Добавьте в cron для автоматизации (например, каждый день в 2:00):
0 2 * * * /path/to/backup_config.sh
**Требования:** установленный `openssh-client`, доступ по SSH-ключу к SFTP-серверу.
**Безопасность:** никогда не храните пароли в скрипте — используйте SSH-ключи или `sshpass` только в защищённой среде.
