Как создать резервную копию файлов с удаленного Linux с помощью сценария Rsync

Одним из эффективных способов резервного копирования файлов является использование утилиты Rsync. Rsync – это мощный инструмент для эффективной передачи файлов между компьютерами по сети. В этом уроке вы узнаете, как с помощью простого скрипта rsync* выполнить *резервное копирование файлов с удаленной Linux-системы (VPS) на локальную систему. Вы также узнаете, как использовать скрипт с аутентификацией по паролю SSH и с аутентификацией по ключу SSH

Резервное копирование удаленного Linux VPS с помощью Rsync

Я регулярно использую этот сценарий для резервного копирования файлов с удалённого VPS на мой локальный рабочий стол Debian Если вы ищете простой сценарий для резервного копирования удалённого Linux VPS с помощью Rsync, вы можете выбрать любой из следующих вариантов сценария.

1. Rsync Backup Script for SSH Password-based Authentication

Создайте текстовый файл, например, rsync_script_with_ssh_password.sh, со следующим содержимым.

#!/bin/bash
# Define source and destination directories
source_directory="/path/to/source"
destination_directory="/path/to/destination"
# Define the SSH password
ssh_password="YourRootPassword"
# Loop until rsync completes successfully
while true; do
    # Perform the rsync operation with SSH password authentication and progress display
    rsync -avz --partial --append --progress -e "sshpass -p '$ssh_password' ssh -p 2200 -o StrictHostKeyChecking=no" root@your_remote_vps_ip:"$source_directory" "$destination_directory"
    # Check the exit status of rsync
    if [ $? -eq 0 ]; then
        echo "rsync completed successfully."
        break  # Exit the loop if rsync is successful
    else
        echo "rsync failed or was interrupted. Retrying in 5 seconds..."
        sleep 5  # Wait for 5 seconds before retrying
    fi
done

1.1. Пояснение к сценарию

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

Здесь приводится описание сценария:

  1. Определите каталоги источника и назначения:
    source_directory="/path/to/source"
    destination_directory="/path/to/destination"

    В этих переменных хранятся каталоги источника и назначения для операции rsync. Вам следует заменить их на реальные пути, которые вы хотите использовать.
  2. Задание SSH-пароля:
    ssh_password="YourRootPassword"

    В этой переменной хранится SSH-пароль для аутентификации при подключении к удаленному серверу. Замените "YourRootPassword" своим реальным паролем root.
  3. Loop Until rsync Completes Successfully:
    while true; do

    Это запускает бесконечный цикл, который будет выполняться до тех пор, пока операция rsync не завершится успешно. Это позволяет скрипту повторить операцию в случае неудачи.
  4. Выполнить операцию rsync:
    rsync -avz --partial --append --progress -e "sshpass -p '$ssh_password' ssh -p 2200 -o StrictHostKeyChecking=no" root@your_vps_ip:"$source_directory" "$destination_directory"

    Эта строка выполняет операцию rsync со следующими опциями и конфигурациями:
    • -avz: Режим архивирования с выводом подробной информации и сжатием.
    • --partial: Позволяет возобновить частичную передачу.
    • --append: Добавляет данные в файлы вместо того, чтобы начинать заново.
    • --progress: Отображает информацию о ходе выполнения.
    • -e "sshpass -p '$ssh_password' ssh -p 2200 -o StrictHostKeyChecking=no": Определяет команду и опции SSH включая аутентификацию по паролю.
    • sshpass. Замените номер ssh-порта 2200 на свой собственный.
    • Проверка состояния выхода из rsync:
      if [ $? -eq 0 ]; then
          echo "rsync completed successfully."
          break  # Exit the loop if rsync is successful
      else
          echo "rsync failed or was interrupted. Retrying in 5 seconds..."
          sleep 5  # Wait for 5 seconds before retrying
      fi

      После выполнения операции rsync данная секция проверяет статус выхода из rsync. Если статус выхода равен 0 (что означает успех), то печатается сообщение об успехе и происходит выход из цикла. В случае неудачи (ненулевой статус выхода) печатается сообщение об ошибке, выполняется ожидание в течение 5 секунд, после чего операция rsync выполняется повторно.
    • Remove the SSH Key from the Agent* (If Using SSH Keys):
      ssh-agent -k

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

1.2. Сделать сценарий исполняемым

Выполните следующую команду, чтобы сделать сценарий исполняемым:

chmod +x rsync_script_with_ssh_password.sh

1.3. Запуск сценария

Запустите сценарий с помощью команды:

./rsync_script_with_ssh_password.sh

Это займет некоторое время, зависящее от объема данных и скорости сети.

После успешного завершения вы увидите вывод, подобный приведенному ниже:

receiving incremental file list
./
ostechnix.tar.gz
 11,151,804,222 100%  259.80kB/s    3:25:11 (xfr#1, to-chk=0/3)
sent 46 bytes  received 3,271,217,407 bytes  265,445.49 bytes/sec
total size is 11,151,804,817  speedup is 3.41
rsync completed successfully.

Помните, что использование паролей в скриптах может представлять угрозу безопасности, поэтому важно принять меры предосторожности для защиты ваших скриптов и учетных данных. Кроме того, для повышения безопасности при работе с удаленными серверами рекомендуется использовать аутентификацию на основе ключей SSH

2. Rsync Backup Script for SSH Key-based Authentication

Для повышения безопасности и удобства доступа без пароля наш второй сценарий использует аутентификацию на основе ключей SSH

2.1. Настройка аутентификации на основе ключей SSH

Прежде всего, необходимо настроить аутентификацию на основе ключей SSH (она же беспарольная аутентификация SSH). Если вы не знаете, как это сделать, обратитесь к ссылке, приведенной ниже.

2.2. Создание сценария Rsync

Если вы хотите модифицировать сценарий для аутентификации по ключу SSH вместо аутентификации по паролю, вы можете сделать это, удалив код, связанный с паролем SSH В частности, можно удалить часть sshpass команды rsync и связанную с ней переменную ssh_password.

Следующий модифицированный сценарий для аутентификации на основе ключей SSH

Создайте текстовый файл (например, rsync_script_with_ssh_key) со следующим содержимым.

#!/bin/bash
# Define source and destination directories
source_directory="/path/to/source"
destination_directory="/path/to/destination"
# Loop until rsync completes successfully
while true; do
    # Perform the rsync operation with SSH key-based authentication and progress display
    rsync -avz --partial --append --progress -e "ssh -i /path/to/your/private/key -p 2200 -o StrictHostKeyChecking=no" root@your_vps_ip:"$source_directory" "$destination_directory"
    # Check the exit status of rsync
    if [ $? -eq 0 ]; then
        echo "rsync completed successfully."
        break  # Exit the loop if rsync is successful
    else
        echo "rsync failed or was interrupted. Retrying in 5 seconds..."
        sleep 5  # Wait for 5 seconds before retrying
    fi
done

В этом модифицированном скрипте:

  • Команда sshpass и переменная ssh_password были удалены.
  • Команда rsync использует опцию -i для указания пути к закрытому ключу для аутентификации на основе ключа SSH

Убедитесь, что вы заменили /path/to/your/private/key на реальный путь к вашему закрытому ключу. Этот сценарий будет использовать аутентификацию на основе ключа SSH для подключения к VPS, что делает ее более безопасной и удобной по сравнению с аутентификацией на основе пароля.

2.3. Сделать скрипт исполняемым

Выполните следующую команду, чтобы сделать скрипт исполняемым:

chmod +x rsync_script_with_ssh_key.sh

2.4. Запуск сценария

Запустите сценарий с помощью команды:

./rsync_script_with_ssh_key.sh
В зависимости от скорости сети и размера данных передача файлов может занять некоторое время.

Планирование резервного копирования с помощью cron

Вы можете запланировать запуск скрипта в определенное время с помощью утилиты cron в Linux. cron позволяет автоматизировать выполнение задач, включая запуск скриптов, через заданные интервалы или в определенное время. Вот как можно запланировать запуск скрипта на определенное время:

  1. Откройте конфигурацию Crontab:
    Откройте для редактирования конфигурацию crontab вашего пользователя. Для этого выполните следующую команду:
    crontab -e

    Это откроет файл конфигурации crontab в текстовом редакторе по умолчанию.
  2. Добавьте запланированное задание:
    В файл crontab добавьте строку, в которой укажите, когда и как часто должен запускаться скрипт. Формат строки задания cron следующий:
    * * * * * /path/to/script.sh

    Вот что означает каждое поле:
    • Первое поле (минуты) может быть числом от 0 до 59.
    • Второе поле (часы) может быть числом от 0 до 23.
    • Третье поле (дни месяца) может быть числом от 1 до 31.
    • Четвертое поле (месяцы) может быть числом от 1 до 12 или трехбуквенной аббревиатурой (например, Jan, Feb и т.д.).
    • Пятое поле (дни недели) может быть числом от 0 до 7, где и 0, и 7 означают воскресенье, или трехбуквенной аббревиатурой (например, Sun, Mon и т.д.).
      Например, чтобы запускать скрипт каждый день в 2 часа ночи, можно добавить в файл crontab следующую строку:
      0 2 * * * /path/to/your/script.sh

      Убедитесь, что вы заменили /path/to/your/script.sh на реальный путь к вашему скрипту.
    • Сохранить и выйти:
      Сохранить файл crontab и выйти из текстового редактора.
    • Проверка запланированного задания:
      Для проверки того, что задание cron было добавлено, можно вывести список заданий cron пользователя следующей командой:
      crontab -l

      В результате будет выведен список запланированных заданий пользователя.
      Ваш скрипт теперь будет запускаться автоматически в указанное время каждый день. Вы можете настроить расписание, изменив значения в строке cron заданий в соответствии со своими потребностями.

Заключение

Резервное копирование необходимо любой организации, стремящейся обеспечить сохранность своих данных и непрерывность бизнеса. К счастью, rsync предлагает надежное средство защиты важных данных.

Если вы еще не создали резервную копию своей системы, настоятельно рекомендуем сделать это сейчас, пока не произошло никаких непредвиденных событий.

Зарубин Иван Эксперт по Linux и Windows

Парашютист со стажем. Много читаю и слушаю подкасты. Люблю посиделки у костра, песни под гитару и приближающиеся дедлайны. Люблю путешествовать.

Вдохновлен ostechnix.com

Комментарии (0)