Есть ли какое-нибудь хорошее существующее решение для перемещения файлов с хоста A на хост C, используя хост B a в качестве пассивной промежуточной области хранения.
A -> B -> C
Ограничения
Цель состоит в том, чтобы через регулярные промежутки времени перемещать файлы из 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
, создавая второй туннель, заканчивающийся на ssh-сервере C
.
ssh someuser @ C - NL 5000: 127.0.0.1: 22
Со второго терминала на A
, rsync ваши файлы прямо на C
rsync -avz -e "ssh -p 5000" --progress --remove-source-files / источник / каталог (скрытый)
Возможно, даже удастся настроить туннели на шагах 1 и 2 с помощью одной команды, но в быстром тесте, который я сделал, я не смог. Это может потребовать настройки ключей ssh на B
и C
.
Если вы собираетесь автоматизировать процесс копирования, вам может потребоваться что-то вроде autossh , чтобы настроить и отключить туннели для вас через службы. Или вы можете сделать это через cron ..