Есть ли какое-либо хорошее существующее решение для перемещения файлов с хоста A на хост C, используя хост B a в качестве пассивной промежуточной области хранения.
А -> В -> С
Ограничения
Цель состоит в том, чтобы через регулярные промежутки времени перемещать файлы из A в C, используя B в качестве промежуточной области хранения.
Мы можем предположить, что все хосты работают под Unix / Linux. Предпочтительные инструменты: ssh / rsync / bash + другие «стандартные» инструменты.
Я думал о создании решения, используя несколько сценариев bash для rsync в два этапа и используя квитанции, содержащие контрольные суммы, для определения того, когда файл был успешно перемещен полностью.
Есть ли какие-нибудь существующие решения?
Я не вижу необходимости хранить что-либо на B, вы можете просто использовать его для прокси-соединений между A и C с помощью любого прокси-программного обеспечения, такого как переадресация портов ssh или socks. Может быть, вы могли бы даже маршрутизировать / nat через B?
Или, поскольку вы специально просили, чтобы сделать это по-своему, вы можете использовать NFS / Samba для копирования файлов и проверки завершения с помощью различных методов. На ум приходит создание файла на общем ресурсе для передачи сообщений типа «копировать завершено» или «нормально удалить» между обеими системами. Или, как вы сказали, что-то с MD5 и т. Д. Как бы вы это ни делали, я уверен, что это будет специальная работа. Но не сложный. Я сомневаюсь, что существуют какие-либо существующие способы решения вашей проблемы таким образом.
Комментарий Свена к вашему вопросу - определенно правильный способ сделать это.
Сделать это можно так:
Из A
SSH в B
, создавая туннель на порту 5000
ssh someuser@B -L 5000:127.0.0.1:5000
С этой оболочки B
, SSH в C
создание второго туннеля, заканчивающегося в C
ssh-сервер.
ssh someuser@C -NL 5000:127.0.0.1:22
Со второго терминала на 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 ..