Соревнования по программированию

Использование rsync и SSH для автоматического переноса данных на удаленный сервер

Положим, что нам необходимо периодически переносить данные с сервера источника (Server1) на сервер приемник (Server2). Обычно это может потребоваться для сохранения бекапов или синхронизации каких-то данных. Для этой цели предлагается использовать команду rsync и соединяться с удаленным сервером через SSH. В обычном режиме при соединении через SSH второй сервер будет запрашивать пароль, то есть требовать дополнительные действия от пользователя. Это не подходит для автоматизированного переноса данных. Поэтому процедура слегка усложняется.

Дано:

Server1 (источник)
User: user1
Password: pass1
Папка для переноса: /backup/arch/

Server2 (приемник)
User: user2
Password: pass2
Папка для приема информации: /hdd2/get/

1) Логинимся через SSH на Server1.
2) Server1: cd ~/
3) Server1: mkdir .ssh
Замечение: иногда из под текущего юзера это сделать невозможно (например при работе из под Plesk), в этом случае папку необходимо создавать из под root.
4) Server1: ssh-keygen -t rsa
Наберите в качестве пути ./.ssh/id_rsa
Затем два раза Enter
5) Переносим любым способом ~/.ssh/id_rsa.pub на Server2. Предположим, что мы положили его в папку /hdd2/
6) Server2: cd ~/
7) Server2: mkdir .ssh
8) Server2: cat /hdd2/id_rsa.pub >> ./.ssh/authorized_keys
Если файл не существует, то он автоматически будет создан
9) Server2: chmod 700 ./.ssh/authorized_keys
Необходимо в целях безопасности
10) Далее используем команду rsync с первого сервера. Для начала рекомендуется проделать это один раз вручную, во-первых, что бы проверить, как все работает, во-вторых, иногда требуется создать автоматический batch-файл, который для своего создания в первый раз требует выбрать yes или no вручную:
Server1: nice -n +17 rsync -avz /backup/arch/ user2@Server2_IP:/hdd2/get/
Замечание: рекомендуется использовать nice что бы процесс копирования шел в фоновом режиме.
11) Теперь можно приступить к автоматизации через cron. Запишите эту команду в файл “rsync.sh”. Внимание зачастую для корректной работы требуется прописать полные пути до nice и rsync. В моем случае пути такие:
/bin/nice -n +17 /usr/bin/rsync -avz /backup/arch/ user2@Server2_IP:/hdd2/get/

12) Создаем файл cron.txt со следующим содержимым (что бы не мучиться в редакторе vi)
30 5 * * * /bin/sh /backup/rsync.sh
Эта команда означает, что бэкап будет выполняться каждый день в 5-30 утра.

Далее записываем cron для текущего юзера:
Server1: crontab /backup/cron.txt

Заключение: для более гибкого управления переносом данных смотрите документацию по cron и rsync.