Сервер в кармане, или просто о сложном!

главная - Статьи - 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 и т.п. В пределах Санкт-Петербурга возможен выезд к заказчику. См. контакты.