Резервное копирование файлов по SSH во FreeBSD

Единственный 100% способ восстановить утерянные по той или иной причине данные – это иметь резервную копию. В этом посте я опишу, как настроить резервное копирование с помощью ssh и crond.

Как нетрудно догадаться, нам понадобятся две машины. На одной хранятся важные данные и поднят sshd (сервер, в моем случае на FreeBSD), на второй имеется crond и место под хранение резервных копий (клиент в моем случае на Ubuntu server).

1. Доступ к серверу без пароля

Поскольку делать backup мы будем по крону, придется настроить доступ к серверу по identity file. Заходим на сервер, и проверяем, что /etc/ssh/sshd_config не содержит строчки:

PubkeyAuthentication no

По умолчанию ее там и не должно быть. Затем переходим в домашний каталог пользователя, от чьего имени будем делать резервные копии и проверяем, что права доступа к каталогу .ssh установлены в 700.

На стороне клиента выполняем следующую последовательность команд от имени пользователя, который будет производить резервное копирование по крону:

ssh-keygen

 

cat ~/.ssh/id_rsa.pub | ssh user@server "cat >> .ssh/authorized_keys"

Здесь мы создали пару ключей для входа на сервер по ssh и скопировали наш public-key на сервер. Делаем проверку:

ssh user@server

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

2. Скрипт резервного копирования

На машине, с моей легкой руки названной клиентом, создаем каталог, где будет хранится скрипт, запускаемый по крону, и каталог для резервных копий. Для определенности, у меня это будут ~/cron-backup и ~/cron-backup/backups/ соответственно. Тут важно убедится, что последний каталог находится на разделе, где достаточно место для хранения резервных копий. Если кто-то вдруг забыл, проверить свободное место можно командой df -h.

Вот так может выглядеть скрипт резервного копирования:

#!/bin/sh
# daily-backup.sh script
# (c) Alexandr A Alexeev 2009 | http://eax.me/

# переходим в каталог, где находится скрипт
cd /home/client-user/cron-backup

# делаем резервную копию каталога на сервере
ssh user@server \
"tar cvzf - path/to/data/abc" > \
./backups/data-abc-`date "+%Y-%m-%d"`.tgz

ssh user@server \
"tar cvzf - path/to/data/def" > \
./backups/data-def-`date "+%Y-%m-%d"`.tgz

# удаляем резервные копии старше одной недели
find ./backups -mtime +7 -print -delete

Меняем права доступа к нашему скрипту и проверяем его работоспособность:

 chmod u+x daily-backup.sh
 
 ./daily-backup.sh
 
 ls -la backups
 

Добавить комментарий