Czy istnieje prosty sposób przesyłania plików między dwoma serwerami SSH / SFTP? Idealnym rozwiązaniem byłaby FileZilla, ale pozwala tylko utworzyć połączenie między lokalnym a zdalnym, ale nie między zdalnym a zdalnym.
Teoretycznie mógłbym otworzyć dwa okna Nautilus i podłączyć do niektórych ssh://server1/path/to/folder
i ssh://server2/path/to/folder
, a następnie po prostu wyciągnąć pliki z jednego do drugiego boku. Z mojego doświadczenia wynika, że jest to bardzo niestabilne. Przesyłanie plików w sumie wielkości np. 10 MB nie stanowi problemu, ale przesłanie np. 10 GB często powodowało, że Nautilus się rozłączał i pozostawał tam w potrzebie ps -e | grep nautilus
-> kill -9 <pid>
. Testowałem to samo z Nemo i Cają. Podczas gdy Nemo jest bardziej stabilny niż dwa pozostałe, wciąż nie jest doskonały i od czasu do czasu pęka. FileZilla jest wyjątkowo stabilny, tak naprawdę nigdy go nie złamał, ale nie jest zbyt elastyczny ze względu na wspomniany fakt, że może łączyć się tylko z jednym serwerem SSH.
Oczywiście mógłbym również zamontować folder sshfs
, ale jest to trochę niewygodne rozwiązanie. Zbyt wiele pracy wstępnej do wykonania, aby uruchomić prosty transfer.
Czy jest jakaś aplikacja, która może obsłużyć transfery między dwoma serwerami SSH bez zerwania? Idealne byłoby coś takiego jak FileZilla, który ponownie odbierze zadanie, jeśli połączenie zostanie przerwane.
Odpowiedzi:
Jeśli jesteś w wersji Ubuntu, która jest nadal obsługiwana, wówczas
scp
komenda zapewni-3
przełącznik, który umożliwia kopiowanie plików z remote1 do remote2 poprzez localhost :Można również pominąć
-3
przełącznik, ale wtedy trzeba będzie klucza publicznego (id_rsa.pub
I)user1@remote1
w plikuauthorized_keys
zuser2@remote2
:scp
potem pod maską robissh user1@remote1
pierwszy i stamtądscp /path/to/file1 user2@remote2:/path/to/file2
. Dlatego poświadczenie musi być dystrybuowane inaczej niż-3
rozwiązanie.Innymi słowy:
scp -3 remote1:file1 remote2:file2
przenosi plik z remote1 do localhost a następnie z powrotem do remote2 . Dane przesyłane są zdalnie1 → host lokalny → zdalny2 . Localhost jest 3rd party w tym scenariuszu stąd-3
. Aby to zadziałało, potrzebne będą poświadczenia z hosta lokalnego zarówno na zdalnym1, jak i na zdalnym2, ponieważ localhost łączy się z nimi oboma.scp remote1:file1 remote2:file2
kopie pliku bezpośrednio z remote1 do remote2 w Prędkość, z jaką są połączone ze sobą. localhost nie jest tutaj zaangażowany (poza wydaniem polecenia). Dane przesyłane są zdalnie1 → zdalnie2 . Aby to zadziałało, będziesz potrzebować poświadczeń z hosta lokalnego tylko na zdalnym1, ale dodatkowo potrzebujesz poświadczeń zdalnego1 na zdalnym2, ponieważ localhost łączy się tylko ze zdalnym1, a następnie zdalny1 łączy się ze zdalnym2 .Jeśli to możliwe, wybrałbym drugie podejście. Ponieważ niektóre komentarze już powiedzieć:
zazwyczajczęsto kabel sieciowy między remote1 i remote2 jest znacznie grubsza niż kabla między nimi a localhost .źródło
-3
.W większości przypadków dwa serwery ssh mogą się nawzajem połączyć (lub przynajmniej jeden może dotrzeć do drugiego), a ponownie w większości przypadków Internet stacji roboczej jest znacznie gorszy niż którykolwiek z serwerów.
Jeśli tak, to najlepiej jest zamówić jeden serwer do przeniesienia na inny.
Sprawdź
nohup.out
na serwerze 1 pod kątem błędów.Jeśli osiągalność serwera jest odwrotna, możesz odwrócić, która maszyna jest nadrzędna:
źródło
Być może możesz użyć jednego z kilku interfejsów GUI do rsync:
Czy jest jakaś aplikacja GUI dla polecenia rsync?
A może możesz użyć rsync bezpośrednio z wiersza poleceń, aby połączyć się z dwoma zdalnymi serwerami:
„Jak synchronizować pliki między dwoma pilotami”
Często loguję się na jednym serwerze za pomocą ssh, a następnie z wiersza poleceń tego serwera używam rsync do wypychania lub pobierania plików na drugi serwer zdalny - jest to na ogół znacznie szybsze niż próba przesłania plików przez jakiś trzeci komputer.
Rsync jest wystarczająco inteligentny, aby wykonać jakąś pracę, a jeśli coś pójdzie nie tak i zakłóci proces, może później wznowić od miejsca, w którym zostało przerwane.
źródło
Musisz użyć protokołu SCP.
scp file you want to transfer login@address_of_second_server:/path_where_you_want_to_save
źródło