Пусть есть структура
Host1 -> Host2
/photo /volume1/backup/photo
I) Создаем паблик ключ. Важно: На вопрос - 'Enter passphrase' нужно просто нажать ENTER, При этом будет создан ключ без пароля.
Имейте в виду, что это представляет угрозу безопасности, так как это понижает безопасность удалённой системы до
уровня безопасности вашей локальной системы [злоумышленник, получивший доступ к секретному ключу, хранящемуся в вашей
локальной системе, может воспользоваться им для доступа к удалённой системе].
Поэтому делайте это на свой страх и риск. Но если этого не делать, то любая ssh команда, которая должна быть выполнена на удаленном хосте будет запрашивать пароль.
1) Создаем ключ на Host1
[@Host1]# ssh-keygen -t dsa -C "For Backup use only"
Generating public/private rsa key pair.
Enter file in which to save the key (/user/.ssh/id_rsa): /home/user/workspace/rsync/.ssh/backup.id_rsa
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/user/workspace/rsync/.ssh/backup.id_rsa.
Your public key has been saved in /home/user/workspace/rsync/.ssh/backup.id_rsa.pub.
The key fingerprint is:
a2:fd:3c:78:f1:1e:9d:a0:3a:ca:f5:f8:00:64:90:f5 For Backup use only
2) Копируем на Host2 public key /home/user/workspace/rsync/.ssh/backup.id_rsa.pub
scp –P 2222 /home/user/workspace/rsync/.ssh/backup.id_rsa.pub userHost2@Host2:/home/user/rsync/.ssh
добавляем public key в authorized_keys:
идем на Host2 и выполняем
cat /home/user/rsync/.ssh/backup.id_rsa.pub >> ~/.ssh/authorized_keys
( можно также использовать команду ssh-copy-id )
Если все сделали правильно, то теперь можно заходить без пароля по ключу с Host1 на Host2 -
проверяем, выполнив на Host1 команду : ssh -i /home/user/rsync/.ssh/backup.id_rsa userHost2@Host2
II) Запускаем скрипт backup.sh ( смотри ниже )
Что сделает скрипт.
1) Синхронизирует папки между хостами 1 и 2
2) Если находит папку best, то на хосте 2 в паке /photo/ создает папку с именем folderXXX_best и монтирует одну на другую
После этого переиндексировав папки в PS у нас будет добавлен новый альбом folderXXX_best, для которого реальные фото будут находиться Не в папке /photo,
плюс они будут засинхронизированы с хостом 1
Считывает папки для бэкапа из файла BACKUP_LIST на Host1 и синхронизирует их с Host2
Предположим есть такая стуктура папок на хостах 1 и 2
Host1 -> Host2
/photo /volume1/backup/photo
/folderA/ /volume1/photo
/best
/folderB/
/best
/folderC/
/best
прописываем свои значения в переменные:
LOG_NAME
- аутпут лог
LOG_DIR
- дир. для лога
BACKUP_LIST
- список дир. для бэкапа
TO
- дир., куда бэкапим
EXCLUDES
- список паттернов файлов, которые не бэкапим, если не существует - то не используется
BSERVER
- имя бэкап сервера
BUSER
- имя юзера бэкап сервера
SKEY
- путь к id_rsa ключу, который создавали на 1 шаге
PSPATH
- путь к папке PS
Создаем файл BACKUP_LIST, прописав туда папки folderA и folderВ
/photo/folderA
/photo/folderB
TO=/volume1/backup/photo
EXCLUDES=/home/user/rsync/excludes.lst
BSERVER=Host2
BUSER=root
SKEY=/home/user/rsync/.ssh/backup.id_rsa
PSPATH=/volume1/photo/
запустив скрипт, хост 2 будет выглядеть так ( со всеми файлами ) -
/volume1/backup/photo
/folderA/
/best
/folderB/
/best
/folderC/
/best
/volume1/photo
folderA_best
folderB_best
folderB_folderC_best