главная - Статьи - Linux, FreeBSD
Rsync через ssh
Дата обновления: 09.04.2025Теги: Резервное копирование Rsync Linux SSH

У нас есть два сервера:
1) 1.1.1.1 - основной сервер (файлы, почта, что угодно иное), пользователь user1.
2) 2.2.2.2 - сервер, на котором хранятся резервные копии, пользователь user2.
Требуется с помощью rsync сделать резервную копию данных сервера 1.1.1.1 на сервер 2.2.2.2
Считаем, что раньше вы не настраивали доступ по ssh к серверам по ключам, а используете пароли. Заодно от паролей избавимся.
Идея: находясь на сервере 2.2.2.2, мы запускаем процесс копирования данных с основного сервера 1.1.1.1 (к себе, на 2.2.2.2).
Проверяем коннект ssh с паролем
Если мы с сервера 2.2.2.2 не сможем с паролем соединиться по ssh к 1.1.1.1, то дальше можно и не продолжать.
Готовим почву
На серверах установим rsync:
apt install rsync
При установке будет создана также служба rsync.service. Не нужно ее ни запускать, ни разрешать и т.п. Принцип такой: используя канал ssh, подключаемся к удаленному хосту и просто выполняем от имени пользователя какие-то команды. При этом функционал службы rsync никак не задействуется.
На сервере 2.2.2.2 (с которого будем коннектится) сгенерируем сертификат для доступа без пароля:
# ssh-keygen -f ~/.ssh/id_rsa -q -P "" -b 4096
где:
- -q - silense
- -f - имя файла ключа
- -P "" - пустой пароль
- -b 4096 - размер ключа, бит
Просмотрим публичный ключ, который надо будет скопировать на 1.1.1.1, куда будем впоследствии подсоединяться:
# cat ~/.ssh/id_rsa.pub ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQDIWzr1xet8zvzOWBFRHChCVq/YUg4YyE0Ks WjZc8+R3URotr3om5Q/mDYSkXrqf9dY5IYpvvaimSYc+08BkaCXfDQ3YnzUgu44YnECRt0J7y XB01PHsrj/jAUaZ5XK47n0O4njvUI2CSegMFva3ZpLip3Qw9sw1R7wzAxUR6o6MqfTLjivUAa ... DbE98Kn1OlqT5bVbvJeXn/4Snk+47m10+zZxLIkAvqGW9oxVWNoz+ksYxH+egshLel1juH8H2 qaY1phfR5XkMNzbRlX3JfQsw+pCE4/WZ6lsrRD/hc5qgDk54PUaaxA0mcl5AOvEd8uKJN8W9C 9Re5MWbPT0/gAru3ZxzHbO1/rDZMotzPHtRuCMsCBH5H+oUkXvBj4TPdw== user1@2.2.2.2
На сервере 1.1.1.1 (откуда будем копировать файлы).
Скопируем этот ключ на сервер 1.1.1.1, на который будем логиниться, в директорию пользователя user1, под которым будем логинитсья, в файл ~/.ssh/authorized_keys file.
Если директории .ssh на 1.1.1.1 не существует, создадим ее:
mkdir ~/.ssh
chmod 0700 ~/.ssh
touch ~/.ssh/authorized_keys
chmod 0644 ~/.ssh/authorized_keys
В файл ~/.ssh/authorized_keys копируем содержимое публичного ключа, созданного на сервере 2.2.2.2 (файл id_rsa.pub) и перезапускаем sshd:
# service sshd restart
Все, мы готовы проверить соединение с 2.2.2.2 на 1.1.1.1 по ssh:
ssh -i /home/user2/.ssh/id_rsa -p 22 user1@1.1.1.1
Если соединение прошло, можно двигаться дальше. Если нет - надо обязательно понять, где проблема (firewall, ошибка copy/paste ключа, забыли restart sshd, что-то еще).
Запускаем rsync через ssh
Мы будем копировать файлы /data/* с сервера 1.1.1.1 на сервер 2.2.2.2 в папку /backup/.
Формат простой: rsync [опции] [откуда] [куда]
rsync -avz -e "ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null" --progress 1.1.1.1:/data/data.zip /backup/
или так:
rsync -avz -e "ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null" --progress user1@1.1.1.1:/data/* /backup/
или даже так:
rsync -avz -e "ssh -p 22" --progress user1@1.1.1.1:/data/* /backup/
-e "ssh ..." - указываем, что хотим все передавать по ssh;
-p 22 - указываем порт, на котором работает ssh на сервере 1.1.1.1;
-a, --archive – архивный режим, включает рекурсивное копирование и сохранение прав и владельца;
-v - расширенный вывод;
-z - использовать компрессию данных;
user1 - локальный пользователь сервера 1.1.1.1, настроенный на логин по ssh по ключу.
Важно 1: Пользователь user1 должен иметь права доступа в /data/. От имени этого пользователя будет запускаться rsync.
Важно 2: Угрохать данные вы всегда успеете! Обратите внимание на синтаксис, соблюдайте порядок [откуда] и [куда]. Работа с данными требует повышенного внимания! Желательно, проверить сначала на тестовых данных.
Вот и все. После копирования проверим, создался ли файл на сервере 2.2.2.2:
ls -al /backup/
Авторизуйтесь для добавления комментариев!

Принимаю заказы на настройку серверов, mikrotik и других роутеров, точек доступа, nginx и т.п. В пределах Санкт-Петербурга возможен выезд к заказчику. См. контакты.