Создаем Bash-скрипт для резервного копирования и отправки на VPS по SSH

В этой статье мы создадим Bash-скрипт, который будет создавать резервные копии важных файлов, архивировать их и отправлять на удаленный VPS-сервер по SSH. Этот скрипт особенно полезен для тех, кто хочет автоматизировать резервное копирование и хранить его в безопасном месте.

Шаг 1: Создание скрипта

Начнем с создания нового файла для нашего скрипта. Откройте терминал и выполните следующую команду:

touch backup_script_ssh.sh

Теперь откройте файл в текстовом редакторе, например, nano:

nano backup_script_ssh.sh

Шаг 2: Написание скрипта

Вставьте следующий код в файл backup_script_ssh.sh:

#!/bin/bash

# Указываем путь к папке, которую нужно архивировать
SOURCE_DIR="/path/to/important/files"

# Указываем путь для сохранения резервной копии
BACKUP_DIR="/path/to/backup"

# Указываем имя архива (с текущей датой и временем)
BACKUP_NAME="backup_$(date +%Y%m%d_%H%M%S).tar.gz"

# Указываем данные для подключения к VPS-серверу
SSH_USER="your_ssh_username"
SSH_HOST="your_vps_ip_or_hostname"
SSH_DIR="/path/to/remote/backup/directory"

# Создаем резервную копию
echo "Создание резервной копии..."
tar -czvf "$BACKUP_DIR/$BACKUP_NAME" "$SOURCE_DIR"

# Проверяем, успешно ли создана резервная копия
if [ $? -eq 0 ]; then
    echo "Резервная копия успешно создана: $BACKUP_DIR/$BACKUP_NAME"
else
    echo "Ошибка при создании резервной копии!"
    exit 1
fi

# Отправляем резервную копию на VPS-сервер по SSH
echo "Отправка резервной копии на VPS-сервер..."
scp "$BACKUP_DIR/$BACKUP_NAME" "$SSH_USER@$SSH_HOST:$SSH_DIR"

# Проверяем, успешно ли отправлена резервная копия
if [ $? -eq 0 ]; then
    echo "Резервная копия успешно отправлена на VPS-сервер."
else
    echo "Ошибка при отправке резервной копии на VPS-сервер!"
    exit 1
fi

echo "Скрипт завершен успешно!"

Шаг 3: Подробное объяснение кода

  1. Определение переменных:
    • SOURCE_DIR — путь к папке, которую нужно архивировать.
    • BACKUP_DIR — путь для сохранения резервной копии.
    • BACKUP_NAME — имя архива, которое включает текущую дату и время.
    • SSH_USER, SSH_HOST, SSH_DIR — данные для подключения к VPS-серверу.
  2. Создание резервной копии:
    • Команда tar -czvf создает сжатый архив (tar.gz) из указанной папки.
    • Флаг -c создает новый архив, -z сжимает его с помощью gzip, -v выводит информацию о процессе, -f указывает имя файла.
  3. Проверка успешности создания резервной копии:
    • Переменная $? содержит код завершения последней команды. Если он равен 0, значит команда выполнена успешно.
  4. Отправка резервной копии на VPS-сервер по SSH:
    • Используется команда scp для копирования файла на удаленный сервер по SSH.
    • Синтаксис команды: scp локальный_файл пользователь@хост:путь_на_сервере.
  5. Проверка успешности отправки:
    • Аналогично проверке создания резервной копии, проверяется код завершения команды scp.

Шаг 4: Настройка прав доступа

Прежде чем запускать скрипт, необходимо установить правильные права доступа:

chmod +x backup_script_ssh.sh

Шаг 5: Настройка SSH-ключей (опционально)

Для удобства и безопасности рекомендуется настроить SSH-ключи. Это позволит избежать ввода пароля каждый раз при подключении к VPS.

  1. Сгенерируйте SSH-ключи, если они еще не созданы: ssh-keygen -t rsa -b 4096
  2. Скопируйте публичный ключ на VPS-сервер: ssh-copy-id $SSH_USER@$SSH_HOST

Теперь вы сможете подключаться к VPS без ввода пароля.

Шаг 6: Запуск скрипта

Теперь вы можете запустить скрипт:

./backup_script_ssh.sh

Если все настроено правильно, вы увидите сообщения о создании резервной копии и ее отправке на VPS-сервер.

Шаг 7: Автоматизация с помощью Cron

Чтобы скрипт выполнялся автоматически, добавьте его в расписание Cron. Откройте редактор Cron:

crontab -e

Добавьте строку, например, для ежедневного выполнения в 2:00 ночи:

0 2 * * * /path/to/backup_script_ssh.sh

Заключение

Теперь у вас есть полностью автоматизированный процесс резервного копирования важных файлов и их отправки на VPS-сервер по SSH. Этот скрипт можно легко адаптировать под другие задачи, например, для резервного копирования баз данных или синхронизации файлов.