Назад | Перейти на главную страницу

Перемещение файлов между хостами с использованием промежуточной области хранения

Есть ли какое-либо хорошее существующее решение для перемещения файлов с хоста A на хост C, используя хост B a в качестве пассивной промежуточной области хранения.

А -> В -> С

Ограничения

Цель состоит в том, чтобы через регулярные промежутки времени перемещать файлы из A в C, используя B в качестве промежуточной области хранения.

Мы можем предположить, что все хосты работают под Unix / Linux. Предпочтительные инструменты: ssh / rsync / bash + другие «стандартные» инструменты.

Я думал о создании решения, используя несколько сценариев bash для rsync в два этапа и используя квитанции, содержащие контрольные суммы, для определения того, когда файл был успешно перемещен полностью.

Есть ли какие-нибудь существующие решения?

Я не вижу необходимости хранить что-либо на B, вы можете просто использовать его для прокси-соединений между A и C с помощью любого прокси-программного обеспечения, такого как переадресация портов ssh или socks. Может быть, вы могли бы даже маршрутизировать / nat через B?

Или, поскольку вы специально просили, чтобы сделать это по-своему, вы можете использовать NFS / Samba для копирования файлов и проверки завершения с помощью различных методов. На ум приходит создание файла на общем ресурсе для передачи сообщений типа «копировать завершено» или «нормально удалить» между обеими системами. Или, как вы сказали, что-то с MD5 и т. Д. Как бы вы это ни делали, я уверен, что это будет специальная работа. Но не сложный. Я сомневаюсь, что существуют какие-либо существующие способы решения вашей проблемы таким образом.

Комментарий Свена к вашему вопросу - определенно правильный способ сделать это.

Сделать это можно так:

  1. Из A SSH в B, создавая туннель на порту 5000

    ssh someuser@B -L 5000:127.0.0.1:5000
    
  2. С этой оболочки B, SSH в C создание второго туннеля, заканчивающегося в Cssh-сервер.

    ssh someuser@C -NL 5000:127.0.0.1:22
    
  3. Со второго терминала на A, синхронизируйте файлы напрямую с C

    rsync -avz -e "ssh -p 5000" --progress --remove-source-files /source/directory username@127.0.0.1:/destination/directory
    

Возможно, даже удастся настроить туннели на шагах 1 и 2 с помощью одной команды, но в быстром тесте, который я сделал, я не смог. Это может потребовать настройки ключей ssh ​​на B и C.

Если вы собираетесь автоматизировать процесс копирования, вам может потребоваться что-то вроде автосш для настройки и разрушения туннелей для вас через службы. Или вы можете сделать это через cron ..