Чому для rsync не можна використовувати два пульта? [зачинено]


33

Коли джерело та пункт призначення віддалені, rsync скаржиться:

The source and destination cannot both be remote. rsync error: syntax or usage error (code 1) at main.c(1156) [Receiver=3.0.7]

Чи є непереборна технічна перешкода для того, щоб змусити rsync робити це? Або це просто випадок ще не здійсненого? Створюється локальний буфер в пам'яті порівняно легко, який опосередковує передачу між двома віддаленими, зберігаючи хеші та дані.

EDIT

Оскільки люди роблять деякі дотичні пропозиції, я розмістив окреме запитання, в якому детально описував свій конкретний випадок використання. Це дійсно два окремих, і я думаю, що варто було б знати ці деталі для rsync


1
Це передбачало б віддалений src rsyncd, який надсилає дані до віддаленого dest rsyncd. Ви можете обійти його, запустивши ssh'ing до системи src та застосувавши rsync.
Алекс Холст

@AlexHolst Я не думаю, що це спрацювало б у моєму конкретному випадку. дивись редагувати
goncalopp

На жаль, помилка сервера не займається теоретичними питаннями; лише відповіді на питання щодо проблем, з якими ви насправді стикаєтесь. Дивіться FAQ для більш докладної інформації.
Кріс С

2
Вибачте (модератори), це цікаве запитання: причина полягає в тому, що алгоритм rdiff не може бути симетричним. Більший накладні витрати на процесор і пам'ять знаходяться на "активній" стороні. "Пасивна" сторона потребує лише обчислення контрольних сум усіх блоків (див. Параметр -блок розміру) всіх модифікованих файлів та їх повторне відтворення. Це робиться з дуже невеликими вимогами до пам'яті, і більшість операцій можна виконати в кеші першого процесора першого рівня. "Активну" сторону потрібно шукати контрольними сумами, де зараз знаходиться той самий блок даних ...
hynekcer

1
Я думаю, що це чудове питання (у мене було саме це питання, тому я тут), і причина закриття - хибна. Я ще хочу знати відповідь!
reinierpost

Відповіді:


8

чому б не спробувати підключитися до віддаленої машини і почати передачу звідти. Якщо ви використовуєте ssh-ключі, ви можете використовувати пропуск агента, хоча для управління автентифікацією для вас.

ssh -A remotehostA rsync /remote/file/on/host/a remoteHostB:/destination/

Ця команда введе вас у віддаленуHostA і запустить звідти rsync.


3
Існують деякі міркування щодо безпеки. Дивіться правки
goncalopp

3
Крім того, це не спрацює, якщо у вас немає прямого доступу між двома системами ... А якщо отримання прямого доступу передбачає чекати два тижні на розділ безпеки, щоб, можливо, правильно застосувати правила брандмауера ...
Герт ван ден Берг

1
Сценарій: Сервер A має кореневий доступ на основі ключів до серверів B і C. Ви хочете синхронізувати з B до C за допомогою кореневого доступу на обох. Але ви не хочете, щоб B або C мали кореневий доступ один до одного.
thomasrutter

5
scp -3r <remote src> <remote dest>

не має проблем з цим.


4
scp, однак, не робить дельти, AFAIK, і це вкрай потрібно в цьому випадку. Детальніше про мою
редакцію

4
Btw, scp повинні бути з параметрами -3, якщо ви хочете бути схожим на проксі між хостами
alterpub

На жаль, scp не має важливих особливостей rsync, наприклад: можливість не переходити через файлові системи (наприклад, мережевий диск, встановлений у папці користувача), режим архіву (в якому "зберігаються символічні посилання, пристрої, атрибути, дозволи, права власності тощо") тощо ...
Бастіон

1

Ви можете обійти це, встановивши одну (або обидві) віддалених файлових систем за допомогою sshfs. Тоді rsync буде ставитись до цього, ніби до місцевого.

На жаль, це призведе до значного використання пропускної здатності на машині, до якої встановлена ​​файлова система sshfs, тому я б рекомендував робити це лише на тій машині, яка має велику пропускну здатність між вами та третьою машиною.

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


див. редагувати Причина, на яку ви посилаєтесь, - це безпека. (Root) компроміс будь-якої з двох машин не повинен призводити до доступу до файлової системи до іншого. Але, можливо, я атакую ​​це з неправильного кута, і є рішення, яке не передбачає третьої машини ...
goncalopp

Хм. Я думаю, що ці деталі справді слід додати до цього питання. Що стосується кореневого компромісу, то вам справді слід використовувати SELinux.
Майкл Хемптон

Я залишив цю, тому що хтось інший може зацікавитись такою поведінкою зокрема на rsync. AFAIK, SELinux на будь-якій з машин не може визначити, чи був порушений інший, якщо локальне виконання rsync має таку саму поведінку в обох випадках (доступ до файлової системи до певного каталогу).
goncalopp

Я не впевнений, чи розумієте ви, як працює SELinux. Вся його суть полягає в тому, що він заважає службі (навіть компрометованій службі) отримувати доступ до речей, до яких явно не дозволяється отримати доступ, навіть якщо ця служба працює як root.
Майкл Хемптон

У мене є тільки базове розуміння політики SELinux, але Rsync це передбачається доступ до файлової системи, чи не так? Точні ж (локальні) схеми доступу є небажаними, якщо віддалена машина порушена.
goncalopp
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.