2011-08-22 04:12:04 +0000 2011-08-22 04:12:04 +0000
81
81

Najlepszy sposób na przesyłanie plików przez sieć LAN pomiędzy dwoma komputerami z Linuksem

Chcę przesłać pliki (folder muzyczny) pomiędzy dwoma komputerami z Linuxem. Po poszukiwaniach najlepszego sposobu, aby to zrobić, zobaczyłem, że istnieje wiele sposobów, aby to zrobić. Wiem, że pytano o to wiele, wszędzie i wszędzie. Głównym problemem z tym jest to, że nie ma jasnego, niedawnego konsensusu na temat jednego najlepszego sposobu na wykonanie tego zadania w 2011 roku dla początkujących użytkowników Linuksa (nawet w zależności od niektórych parametrów).

Więc w duchu stron Stack Exchange, chcę, aby nie było to związane z moją konkretną sytuacją, ale bardziej przewodnikiem dla innych, jak przesyłać pliki między dwoma komputerami z systemem Linux przez sieć lokalną. Myślę, że wiki byłaby przydatna dla wielu.

Oto co znalazłem do tej pory:

  • ssh
  • sshfs
  • scp
  • sftp
  • nfs
  • samba
  • giver

Co jest najłatwiejsze? Najbardziej elastyczny? Najprostsze? Najlepsze rozwiązanie? Jakie są wady i zalety każdego z nich? Czy istnieją inne (lepsze) opcje? Jakie są parametry przy wyborze najlepszej metody (rozwiązanie może zależeć od liczby plików, rozmiaru plików, łatwości vs. elastyczności, …)?

Odpowiedzi (6)

66
66
66
2011-08-22 04:35:30 +0000

W środowisku Linux, zarówno dla bezpieczeństwa jak i łatwości użycia, ssh jest najlepszym rozwiązaniem. SSH, SSHFS, SCP, i SFTP jak już wspomniałeś są różnymi usługami zbudowanymi na bazie protokołu SSH. SCP jest bardzo łatwy w użyciu, działa tak samo jak CP, ale możesz podać nazwę użytkownika i maszyny w ścieżce. Więc, możemy zrobić CP jak cp ~/music/ ~/newmusic/, ale równie dobrze możemy zrobić scp ~/music/ user@host:~/newmusic aby wysłać to do komputera o nazwie host. To wszystko - nie musimy niczego konfigurować. Zostaniesz poproszony o podanie hasła do konta na drugim komputerze, jeśli nie masz ustawionego certyfikatu lub innego sposobu uwierzytelniania (scp współdzieli te ustawienia z ssh, oczywiście).

SFTP to narzędzie, które ułatwia wykonywanie wielu operacji na zdalnym systemie plików - działa podobnie jak FTP, ale przez SSH, więc jest bezpieczne i wymaga tylko serwera SSH. man sftp powie Ci wszystko o tym, jak go używać. Nie używam SFTP tylko do przenoszenia folderów między dwoma komputerami, jest on bardziej przydatny, gdy masz do wykonania wiele operacji, na przykład gdy zmieniasz kolejność plików na innym komputerze.

SSHFS to rozszerzenie SFTP na system plików: pozwala na zamontowanie wirtualnego hosta w systemie plików, dzięki czemu praca w sieci odbywa się całkowicie przezroczyście. SSHFS jest przeznaczony do półstałych konfiguracji, a nie tylko do jednorazowego transferu plików. Jego skonfigurowanie wymaga nieco więcej wysiłku, o którym możesz przeczytać na stronie projektu ](http://fuse.sourceforge.net/sshfs.html).

Jeśli musisz pracować w środowisku mieszanym (mixed-OS), Samba jest kolejnym najlepszym rozwiązaniem. Windows i OS X obsługują Sambę całkowicie automatycznie, a Linux również, chociaż czasami jest to trudne w użyciu.

19
19
19
2011-08-22 06:49:45 +0000

Dla jednorazowych ruchów zalecany jest scp.

Ale jeśli okaże się, że ten dir może działać i trzeba go przenieść wiele razy, aby utrzymać inną pozycję zaktualizowaną, wtedy możesz użyć rsync (z ssh).

Ponieważ rsync ma wiele argumentów, zwykle umieszczam go w małej powłoce, więc mam go dobrze (za każdym razem). Chodzi o to, aby wysyłać tylko rzeczy, które zmieniły się od ostatniego uruchomienia.

#!/bin/bash

user="nisse"
host="192.168.0.33"

echo "Sync: /home/media/music/"
rsync --archive --delete -v --progress -e "ssh -l $user " /home/media/music/ $host:/home/media/music/

To przeniesie dir o nazwie “/home/media/music/” z lokalnego komputera do komputera o nazwie 192.168.0.33, używając użytkownika “nisse”. I usunie wszystko, co nie istnieje na komputerze lokalnym.

10
10
10
2014-04-27 06:30:49 +0000

Zalecałbym wypróbowanie alternatywnych rozwiązań zamiast używania SSH do przenoszenia plików wewnątrz własnej sieci LAN, ponieważ koszty ogólne są OGROMNE. Poszedłbym z rozwiązaniem Caspara, jeśli to z jakiegokolwiek powodu nie będzie działać dla ciebie:

U źródła:

$ python3 -m http.server {PICK_YOUR_PORT}

W miejscu docelowym:

$ wget -r {ip / hostname}:{port}/{File / Directory}

Będzie to nie tylko lżejsze niż używanie SSH, ale także o wiele szybsze z prędkościami rzędu 45~65MiB na standardowej skrętce CAT6.
Jeśli naprawdę chcesz wycisnąć maksimum z połączenia spróbuj zastąpić wget przez lftp i użyć komend pget -n20 i mirror -r.

8
8
8
2011-08-22 08:57:03 +0000

Najszybsze jest prawdopodobnie netcat (jak opisał to caspar).

Lubię kombinację tar & ssh, która jest bezpieczna i wciąż szybka:

Na źródle

tar -cf - . | ( ssh user@target && cd /target/path && tar -xf - )

Robiąc to jako root, zachowuje uprawnienia do plików. Można też użyć -p po obu stronach. Również -S może być brane pod uwagę, jeśli masz nieliczne pliki.

Możliwe jest zmniejszenie narzutu szyfrowania ssh jeśli użyjesz arcfour jako szyfru, który działa z openSSH:

tar -cpSf - . | ( ssh -c arcfour user@targethost && cd /target/path && tar -xpSf - )

Do aktualizacji zdalnej ścieżki, rsync jest idealne:

rsync -av --sparse --delete -e "ssh -c arcfour" . root@targethost:/target/path
5
5
5
2011-08-22 10:00:32 +0000

Jeśli koniecznie trzeba to zrobić przez sieć LAN, użyłbym rsync, ponieważ w razie przerwania kopiowanie rozpocznie się od miejsca, w którym zostało przerwane. Ma też kilka innych sztuczek minimalizujących ilość przesyłanych danych, choć wątpię, by wiele z nich miało znaczenie w przypadku kopiowania biblioteki muzycznej do dziewiczej lokalizacji. Jeśli chodzi o bezpieczeństwo, wystarczy ustawić najpierw RSYNC_RSH=ssh, a dane będą tunelowane przez ssh.

Gdybym jednak rzeczywiście to robił, prawdopodobnie w ogóle nie korzystałbym z sieci LAN. Skopiowałbym pliki na dysk twardy USB, a następnie z niego usunął. Z mojego doświadczenia wynika, że może to być o wiele rzędów wielkości szybsze niż kopiowanie przez LAN, pomimo konieczności dwukrotnego kopiowania plików - USB 2.0 jest oceniane na 480Mbps, co jest szybsze niż cokolwiek innego niż gigabitowy ethernet, plus jest mniej wrażliwe na warunki, które pogorszą wydajność LAN. Jest to również całkowicie niezależne od systemu operacyjnego, pod warunkiem, że używasz systemu plików, który wszystkie zaangażowane maszyny mogą obsługiwać - polecam VFAT/FAT32, ponieważ jest to dość uniwersalne.

0
0
0
2016-04-14 20:18:21 +0000

Najpierw wykonałem proces ssh dla logowania bez hasła http://www.tecmint.com/ssh-passwordless-login-using-ssh-keygen-in-5-easy-steps/

Dla skryptów i plików tekstowych następujące działa dla mnie po prostu dobrze

Aby przesłać dane z lokalnego hosta do zdalnego hosta.cat localfile | ssh <user>@<ip> "cat > <path>/<remotefile>"

Aby przesłać dane ze zdalnego hosta do lokalnego hosta.ssh <user>@<ip> "cat > <path>/<remotefile>" | cat > localfile

To działa dla mnie do przesyłania plików na systemach wbudowanych, które nie mają wbudowanego klienta ssh lub scp.

Nie ma scp - tylko ssh.