Поиск по сайту:

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

Скрипт резервного копирования Rsync для удаленного Linux VPS: пошаговое руководство

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

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

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

1. Сценарий резервного копирования Rsync для аутентификации на основе пароля SSH.

Создайте текстовый файл, например «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. Цикл до тех пор, пока rsync не завершится успешно:

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 на свой собственный.

5. Проверьте статус завершения 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 (что указывает на успех), он печатает сообщение об успехе и выходит из цикла. Если rsync завершается неудачно (ненулевой статус выхода), он печатает сообщение об ошибке, ждет 5 секунд, а затем повторяет операцию rsync.

6. Удалите ключ SSH из агента (при использовании ключей SSH):

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.

Резервное копирование файлов с удаленного Linux VPS с использованием сценария Rsync

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

2. Сценарий резервного копирования Rsync для аутентификации на основе ключей SSH.

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

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

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

Как настроить аутентификацию на основе ключей SSH в Linux

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 или трехбуквенное сокращение (например, январь, февраль и т. д.).
  • Пятое поле (дни недели) может содержать число от 0 до 7, где 0 и 7 обозначают воскресенье, или трехбуквенное сокращение (например, Вс, Пн ). и т. д.).

Например, чтобы запускать скрипт каждый день в 2:00 ночи, вы можете добавить следующую строку в файл crontab:

0 2 * * * /path/to/your/script.sh

Обязательно замените /path/to/your/script.sh фактическим путем к вашему скрипту.

3. Сохранить и выйти:

Сохраните файл crontab и выйдите из текстового редактора.

4. Проверьте запланированное задание:

Чтобы убедиться, что ваше задание cron добавлено, вы можете просмотреть задания cron вашего пользователя с помощью следующей команды:

crontab -l

Появится список запланированных задач для вашего пользователя.

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

Заключение

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

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

Статьи по данной тематике