W przypadku pojedynczego pliku zamiast SFTP można przesyłać plik przez ssh za pomocą cat
lub pv
po stronie wysyłającej i za pomocą tee
na środkowym serwerze, aby zarówno wysłać dane do pliku tam, jak i wysłać kopię przez inny link ssh, po drugiej stronie po prostu zapisuje dane do pliku. Dokładne wymagane voodoo pozostawię jako ćwiczenie dla czytelnika, ponieważ nie mam teraz czasu na zabawę (przepraszam). Ta metoda działałaby tylko wtedy, gdy drugie miejsce docelowe jest publicznie dostępne za pośrednictwem protokołu SSH, co może nie być prawdą, ponieważ opisuje się je jako maszynę klienta.
Innym podejściem, które jest mniej „uruchom i czekaj”, ale może być łatwiejsze, jest użycie rsync
między serwerem a klientem B. Przy pierwszym uruchomieniu może on otrzymać częściową kopię danych, ale możesz po prostu ponownie uruchomić aby później uzyskać więcej danych (z jednym końcowym uruchomieniem po zakończeniu transferu Klient1-> Serwer). Będzie to działać tylko wtedy, gdy serwer umieści dane bezpośrednio we właściwej nazwie pliku podczas przesyłania SFTP (czasami zobaczysz, że dane przechodzą do pliku tymczasowego, którego nazwa zostaje zmieniona po całkowitym przesłaniu pliku - odbywa się to w celu aktualizacja pliku bardziej atomowa, ale sprawi, że pomysł rsync będzie bezużyteczny). Możesz także użyć rsync do transferu C1-> S zamiast scp (jeśli używasz--inplace
opcja uniknięcia wyżej wspomnianego problemu) - użycie rsync zapewniłoby również ochronę przed koniecznością ponownego wysyłania wszystkiego, jeśli połączenie C1-> Serwer napotka problemy podczas dużego transferu (zwykle używam rsync --inplace -a --progress <source> <dest>
zamiast scp / sftp, gdy rsync jest dostępny, dla takie zachowanie „wznawianie przesyłania”).
Podsumowując powyższe, uruchom:
rsync --inplace -a --progress <source> user@server:/<destination_file_or_folder>
na kliencie1, a następnie uruchomiony
rsync --inplace -a --progress user@server:/<destination_file_or_folder> <destination_on_cli2>
na kliencie2 wielokrotnie, aż pierwszy transfer zostanie zakończony (następnie uruchom ponownie, aby upewnić się, że masz wszystko). rsync
jest bardzo dobry w przenoszeniu tylko absolutnego minimum, musi zaktualizować lokalizację zamiast przesyłać całą partię za każdym razem. W przypadku paranoi możesz chcieć dodać tę --checksum
opcję do poleceń rsync (co zajmie znacznie więcej czasu procesora w przypadku dużych plików, ale nie spowoduje przeniesienia znacznie większej ilości danych, chyba że jest to potrzebne), a dla szybkości --compress
opcja pomoże, jeśli dane przesyłane dane nie są już w formacie skompresowanym.