Для одного файлу замість використання SFTP ви можете передавати файл через ssh за допомогою cat
або pv
на стороні, що надсилає, і tee
на середньому сервері обидва надсилати дані до файлу туди і надсилати копію через інше ssh-посилання, з іншого боку якого просто записує дані у файл. Точний вуду, який я вимагаю, я залишу читачеві як вправу, оскільки зараз не встигаю грати (вибачте). Цей метод працює лише в тому випадку, якщо друге призначення є загальнодоступним через SSH, що може бути не так, як ви описуєте його як клієнтську машину.
Інший підхід, який менш "запустити і чекати", але в іншому випадку може бути простішим, його використовувати rsync
між сервером і клієнтом B. Перший раз, коли ви запустите це, він може отримати часткову копію даних, але ви можете просто повторно запустити його, щоб отримати більше даних після цього (з одним остаточним запуском після завершення передачі Client1-> Server). Це буде працювати лише в тому випадку, якщо сервер під час передачі SFTP передає дані прямо у правильне ім'я файлу (іноді ви побачите дані, що переходять у тимчасовий файл, який потім перейменовують, коли файл повністю передається - це робиться для того, щоб зробити оновлення файлів більш атомне, але зробить ідею rsync непридатною). Ви також можете використовувати rsync для передачі C1-> S замість scp (якщо ви використовуєте--inplace
варіант уникнути згаданої вище проблеми) - використання rsync також захистить вас від необхідності повторного повторного повторного використання, якщо підключення C1-> сервера має проблеми під час великої передачі (я, як правило, використовую rsync --inplace -a --progress <source> <dest>
замість scp / sftp, коли rsync доступний, для ця поведінка "передачі резюме").
Підсумовуючи сказане, виконуючи:
rsync --inplace -a --progress <source> user@server:/<destination_file_or_folder>
на client1, потім працює
rsync --inplace -a --progress user@server:/<destination_file_or_folder> <destination_on_cli2>
на client2 кілька разів, поки перша передача не буде завершена (потім ще раз запустіть, щоб переконатися, що у вас все). rsync
дуже добре лише передавати абсолютний мінімум, який потрібно оновлювати місце, а не передавати весь лот кожен раз. Для параноїя ви, можливо, захочете додати --checksum
параметр до команд rsync (це займе набагато більше часу для процесора для великих файлів, але не призведе до значного перенесення даних, якщо це не потрібно), а для швидкості --compress
опція допоможе, якщо дані ви переносите вже не у стисненому форматі.