Я пытаюсь настроить скрипт оболочки под Debian GNU/Linux для резервного копирования каталога и подкаталогов на удаленный NAS под управлением Linux через SSH. Это соединение должно быть зашифровано.
Я пробовал несколько разных подходов, включая rsync rsh
и такие, но безуспешно. Я знаю, как настроить crontab
, но мне нужен скрипт, который будет работать без присмотра (т. е. он не будет запрашивать пароль)
Может ли кто-нибудь мне помочь?
EDIT: Теперь я могу успешно войти в систему без пароля.
Теперь проблема в том, чтобы заставить rsync скопировать файлы /backups/
в[remote system]:/backups/
Он копирует только одну папку из /backups/
в [remote system]:/backups/
.
EDIT: Кажется, в локальной системе есть один /backups и один /backup... Я пробовал использовать /backups, когда следовало использовать /backup...
Последняя команда:rsync -avzr -e ssh /backup/ admin@[IP]:/backups/
решение1
rsync с версии 2.6.x по умолчанию использует ssh для передачи. Так что об этом уже позаботились, если поддерживается rsync вашего удаленного NAS.
Что касается неконтролируемых передач без пароля, настройте аутентификацию на основе ключа ssh для пользователя, от имени которого вы запускаете cron, и это должно быть сделано. Вот как это настроить --http://www.cyberciti.biz/tips/ssh-public-key-based-authentication-how-to.html
решение2
Вы также можете передать этот флаг rsync, чтобы использовать файл для пароля:
--файл-пароля
Можно легко изменить файл на 400, чтобы никто, кроме вашего пользователя (и пользователя root, конечно) не мог его прочитать.
решение3
Синхронизация ключей SSH, вы сказали, что у вас это работает, но я подумал, что все равно опубликую шаги
подключитесь по ssh к вашему NAS
Чтобы сделать Ключ
ssh-keygen -t rsa on local machine
Затем выполните синхронизацию с компьютером, с которого вы будете выполнять резервное копирование.
cat ~/.ssh/id_rsa.pub | ssh user@hostname ‘cat>>.ssh/authorized_keys’
Скрипт резервного копирования Rync - создаст папку резервной копии на сегодня, затем синхронизирует вчерашние файлы с сегодняшними, что снизит нагрузку на сеть, затем синхронизирует сегодняшние файлы для резервного копирования.
#!/bin/sh
mkdir -p /storage/backups/`date +\%Y-\%m-\%d`-`date +\%A`/$host/$username
rsync -avz /storage/backups/`date --date=yesterday +\%Y-\%m-\%d`-`date--date=yesterday +\%A`/$host/$username/ /storage/backups/`date +\%Y-\%m-\%d`-`date +\%A`/$host/$username/
rsync -avz -e ssh /home/username/ /storage/backups/`date +\%Y-\%m-\%d`-`date +\%A`/$host/$username/
Вам также понадобится скрипт, который очистит резервные копии: он сохранит недельную резервную копию, я могу подтвердить, что это работает на готовых NAS от Netgear.
#!/bin/sh
# Definitions
sevendaysago=$(date --date='6 days ago' +%Y-%m-%d-%A)
# Delete backups from 7 days ago
rm -rf /storage/backups/$sevendaysago
вам нужно будет запустить это, чтобы сделать скрипты работоспособными
chmod u+x script.sh
в cron вам просто нужно будет добавить через crontab -e
@daily sh backupscript
1 17 * * * sh dailycleanup