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

Rsync Backup Script для SSH аутентификация на основе пароля

Создайте сценарий или в каталоге домашних пользователей.

1
$ nano rsync_script_with_ssh_password.sh

Вставьте следующие строки кода:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#!/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
2
source_directory="/path/to/source"
destination_directory="/path/to/destination"

Эти переменные хранят исходные и целевые каталоги для операции rsync. Вы должны заменить их реальными путями, которые вы хотите использовать.

  1. Определение пароля SSH:
1
ssh_password="YourRootPassword"

Эта переменная держит SSH пароль для аутентификации при подключении к удаленному серверу. Замените "YourRootPassword" на свой фактический root пароль.

  1. Успешно завершает:
1
while true; do

Это запускает бесконечную петлю, которая будет работать до успешного завершения операции rsync. Это позволяет сценарию повторно провести операцию, если она провалится.

  1. Выполняйте операцию rsync:
1
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 со следующими параметрами и конфигурациями:

1
2
3
4
5
-avz: Архивный режим с глаголом вывода и сжатия.
--partial: Позволяет возобновить частичные переводы.
--append: Добавляет данные к файлам вместо того, чтобы начинать заново.
--progress: Показывает информацию о ходе работы.
-e "sshpass -p '$ssh_password' ssh -p 2200 -o StrictHostKeyChecking=no": Указывает команду SSH и опции, включая аутентификацию паролей с помощью sshpass. Заменить ssh-порт номер 2200 своим собственным.
  1. Проверяет состояние выхода rsync:
1
2
3
4
5
6
7
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.

  1. Удалить ключ SSH от агента:
1
ssh-agent -k

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

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

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

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

1
$ chmod +x rsync_script_with_ssh_password.sh

1.3. Чтобы инициировать резервное копирование:

1
$ ./rsync_script_with_ssh_password.sh

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

После завершения работы скрипта перейдите в каталог с резервными копиями и убедитесь, что файлы скопированы правильно.

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

Rsync Backup Script для SSH-Key аутентификация

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

2.1 Настройка SSH-Key аутентификация

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

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

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

Создайте сценарий или в каталоге домашних пользователей.

1
$ nano rsync_script_with_ssh_key.sh

Ниже приведен измененный сценарий для аутентификации на основе SSH.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
#!/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. Сделайте сценарий исполняемым

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

1
$ chmod +x rsync_script_with_ssh_key.sh

2.4 Запустить сценарий

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

1
$ ./rsync_script_with_ssh_key.sh

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

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

Расписания cron хранятся в файле с именем crontab. Типичная запись crontab начинается с пяти значений (или звездочек), за которыми следует команда. Значения сообщают cron, когда выполнять команду, а звездочка означает «все».

1
2
3
4
5
6
7
8
* * * * * команда, которая должна быть выполнена
- - - - -
| | | | |
| | | | ----- День недели (0 - 7) (воскресенье = 0 или 7)
| | | ------- Месяц (1 - 12)
| | --------- День месяца (1 - 31)
| ----------- Час (0 - 23)
-------------- Минута (0 - 59)

Чтобы отредактировать crontab, выполните:

1
$ sudo crontab -e

И добавьте строку:

1
0 3 * * * /path/to/your/script.sh

Это запланирует cron для запуска команды в 3:00 утра, каждый день любого месяца.

Убедитесь, что сценарий имеет исполняемые разрешения.

Завершение

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

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