Rsync над ssh з кореневим доступом з обох сторін


14

У мене є один старший сервер ubuntu і один новіший сервер debian, і я переміщую дані зі старого на новий. Я хочу використовувати rsync для передачі даних через, щоб зробити остаточну міграцію простішою та швидшою, ніж еквівалентний процес tar / scp / untar.

Як приклад, я хочу синхронізувати домашні папки по черзі з новим сервером. Для цього потрібен кореневий доступ з обох кінців, оскільки не всі файли на стороні джерела читаються у всьому світі, і призначення має бути записане з правильними дозволами в / home. Я не можу зрозуміти, як надати доступ до кореня rsync з обох сторін.

Я бачив кілька пов’язаних питань, але жодне не відповідає тому, що я намагаюся зробити.

Я налаштував судо і працюю на обох серверах.

Відповіді:


14

Насправді НЕ потрібно дозволяти кореневій аутентифікації через SSH запускати rsync, як пропонує Антуан. Транспортування та автентифікацію системи можна виконати повністю через облікові записи користувачів, якщо ви можете запускати rsync з sudo на обох кінцях для читання та запису файлів.

Як користувач на своєму цільовому сервері, ви можете висмоктувати дані з вихідного сервера так:

sudo rsync -aPe ssh --rsync-path='sudo rsync' boron:/home/fred /home/

Користувачеві, якого ви запускаєте як на обох серверах, знадобиться пароль * sudo для доступу до бінарного файлу rsync, але НЕ потрібно вмикати ssh логін як root де завгодно. Якщо користувач, якого ви використовуєте, не відповідає іншому кінці, ви можете додати user @ boron: щоб вказати іншого віддаленого користувача.

Удачі.

* або вам потрібно буде ввести пароль вручну у вікні очікування.


5
Хоча це старе запитання, я хотів би додати слово ОБЕРЕЖНО до цієї прийнятої відповіді. З мого розуміння, що дозволяє без паролів "sudo rsync" рівнозначно відкривати кореневий рахунок для віддаленого входу. Це тому, що завдяки цьому дуже легко отримати повний доступ до кореня, наприклад, тому що всі системні файли можна завантажувати, змінювати та замінювати без пароля.
Випуск

3

Якщо ваші дані не дуже чутливі, ви можете використовувати tarі socat. На мій досвід, це часто швидше, ніж rsyncнад ssh.

Вам потрібно socatабо netcatз обох сторін.

На цільовому хості перейдіть до каталогу, куди ви хочете розмістити свої дані, після цього запустіть:
socat TCP-LISTEN:4444 - | tar xzf -

Якщо цільовий хост прослуховує, запустіть його з джерела, наприклад:
tar czf - /home/fred /home/ | socat - TCP:ip-of-remote-server:4444

Для цього налаштування вам потрібно надійне з'єднання між двома серверами.


Гарна думка. У надійному середовищі ви наберете велику швидкість, не шифруючи. Це може не мати значення для невеликих файлів, але з ГБ даних це буде.
pboin

2

Гаразд, я зібрав усі підказки, щоб отримати щось, що працює для мене.

Дозволяє викликати сервери "src" і "dst".

Настройте пару ключів для root на цільовому сервері та скопіюйте відкритий ключ на вихідний сервер:

dest $ sudo -i
dest # ssh-keygen
dest # exit
dest $ scp /root/id_rsa.pub src:

Додайте відкритий ключ до авторизованих ключів root на вихідному сервері

src $ sudo -i
src # cp /home/tim/id_rsa.pub .ssh/authorized_keys

Поверніться на цільовий сервер, перетягніть дані поперек за допомогою rsync:

dest $ sudo -i
dest # rsync -aP src:/home/fred /home/
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.