두 Linux 컴퓨터간에 LAN을 통해 파일을 전송하는 가장 좋은 방법


77

두 Linux 컴퓨터간에 파일 (음악 폴더)을 전송하고 싶습니다. 이 작업을 수행하는 가장 좋은 방법을 찾은 후이 작업 을 수행하는 방법 이 많이 있음을 알았습니다 . 나는이 질문 한 알고 많은 , 모든 곳모든 시간을 . 이것의 주된 문제점은 2011 년에 Linux 초보자를 위해이 작업을 수행하는 가장 좋은 방법 중 하나에 대한 명확한 최근 합의가 없다는 것입니다 (일부 매개 변수에 따라 다름).

따라서 Stack Exchange 웹 사이트의 정신상, 이것이 내 특정 상황과 관련이 아니라 로컬 네트워크를 통해 두 Linux 컴퓨터간에 파일을 전송하는 방법에 대한 더 많은 가이드를 원합니다. 나는 위키가 많은 사람들에게 유용 할 것이라고 생각한다.

지금까지 찾은 내용은 다음과 같습니다.

  • ssh
  • sshfs
  • scp
  • sftp
  • nfs
  • 삼바
  • 주는 사람

가장 쉬운 것은 무엇입니까? 가장 유연합니까? 가장 간단합니까? 최고의 솔루션? 각각의 장단점은 무엇입니까? 다른 (더 나은) 옵션이 있습니까? 최상의 방법을 선택하는 데 필요한 매개 변수는 무엇입니까 (솔루션은 파일 수, 파일 크기, 용이성 대 유연성 등에 따라 다를 수 있음)?


2
이 모든 것에서 rsync가 어디에서 작동하는지 설명 할 수 있습니까?
Konerak

jonallard, 질문에 대한 답변 을 추가 하지 마십시오 (실제로 이해가되지 않습니까?) 추가 답변이 필요하다고 생각되면 편집을 제안하거나 직접 답변을 만들 수 있습니다 그것은 모든 것을 요약합니다!
slhck

답변:


65

Linux 환경에서는 보안과 사용 편의성을 위해 ssh가 최선의 방법입니다. 나열된 SSH, SSHFS, SCP 및 SFTP는 모두 SSH 프로토콜 위에 구축 된 다른 서비스 일뿐입니다. SCP는 사용하기 매우 쉽고 CP와 동일하게 작동하지만 경로에 사용자 및 컴퓨터 이름을 제공 할 수 있습니다. 따라서 우리는 CP와 같은 작업을 수행 cp ~/music/ ~/newmusic/할 수 있지만 scp ~/music/ user@host:~/newmusichost라는 컴퓨터 로 쉽게 보낼 수 있습니다. 그게 다야-우리는 아무것도 설정할 필요가 없습니다. 인증서 나 다른 인증을 설정하지 않은 경우 다른 컴퓨터에서 계정 암호를 묻는 메시지가 나타납니다 (scp는 물론 해당 설정을 ssh와 공유 함).

SFTP는 원격 파일 시스템에서 많은 작업을 쉽게 수행 할 수있는 도구입니다. FTP처럼 작동하지만 SSH를 통해 실행되므로 안전하며 SSH 서버 만 필요합니다. man sftp사용 방법에 대한 모든 것을 알려줍니다. SFTP를 사용하여 두 컴퓨터간에 폴더를 이동하는 것은 아닙니다. 다른 컴퓨터에서 파일을 다시 정렬하는 경우처럼 많은 작업을 수행 할 때 더 유용합니다.

SSHFS는 SFTP를 파일 시스템으로 확장합니다. 가상 시스템을 파일 시스템에 마운트 할 수 있으므로 네트워크 환경이 완전히 투명하게됩니다. SSHFS는 일회성 파일 전송이 아니라 반영구적 설정을위한 것입니다. 프로젝트 웹 사이트 에서 읽을 수있는 설정에 더 많은 노력이 필요 합니다.

혼합 OS 환경에서 작업해야하는 경우 Samba가 다음으로 가장 좋습니다. Windows 및 OS X는 Samba를 자동으로 완벽하게 지원하며 Linux는 사용하기가 힘들지만 작동합니다.


3
내가 원했던 답은 완전하고 철저하며 상세하다.
jonallard

2
대한 한 가지 생각, scp일, 우리는 SSH 서버, 리스너의 어떤 종류를 설정하거나 다른 측면에 뭔가 차단을 해제해야합니까? "연결이 거부되었습니다"오류가 발생합니다.
jonallard 5

2
scp는 ssh를 사용하므로 SSH가 작동하면 작동합니다. 이것은 물론 SSH 서버가 실행 중이어야하며 (내가 알고있는 모든 Linux 배포판에서 기본값) 연결이 가능해야합니다 (방화벽, NAT 등은 적절한 예외가 있어야 함).
jcrawfordor

8
분명히 openssh-server우분투 나티에 설치해야합니다.
jonallard

3
ssh암호화 를 사용하면 약간의 추가 오버 헤드가 발생합니다. 관련된 컴퓨터의 CPU 속도가 상당히 느리면 차이가 생길 수 있습니다. 이 경우 netcat또는 이와 유사한 경우 (Caspar의 답변 참조)가 바람직 할 수 있습니다. 물론 실제로 보호 된 LAN에서 암호화가 필요하지 않은 경우에만 가능합니다.
sleske

59

보안이 중요하지 않은 경우 개인적으로 가장 좋아하는 것은 netcat + tar입니다 .

디렉토리를 보내려면, 컴퓨터에서 내용을 보내려는 디렉토리 내부로 cd를 보내십시오.

tar -cz . | nc -q 10 -l -p 45454

컨텐츠를 수신하는 컴퓨터에서 컨텐츠를 표시 할 위치로 cd하고 다음을 수행하십시오.

nc -w 10 $REMOTE_HOST 45454 | tar -xz

교체 $REMOTE_HOST전송을하는 컴퓨터의 IP / 호스트 이름으로. 대신 다른 포트를 사용할 수도 있습니다 45454.

여기서 실제로 발생하는 것은 '수신'컴퓨터가 포트 45454에서 보내는 컴퓨터에 연결하고 디렉토리의 tar 및 gzip으로 된 내용을 수신하고이를 tar (및 gzip)로 직접 전달하여 압축을 푼다는 것입니다. 현재 디렉토리

빠른 예 (localhost를 원격 호스트로 사용)

컴퓨터 1

caspar@jumpy:~/nctest/a/mydir$ ls
file_a.txt  file_b.log
caspar@jumpy:~/nctest/a/mydir$ tar -cz . | nc -q 10 -l -p 45454

컴퓨터 2

caspar@jumpy:~/nctest/b$ ls
caspar@jumpy:~/nctest/b$ nc -w 10 localhost 45454 | tar -xz
caspar@jumpy:~/nctest/b$ ls
file_a.txt  file_b.log

좀 나에게 옛날의 노벨의 IPX 서비스에서 센드 넷과 리넷을 생각 나게합니다 ...
sum1stolemyname

4
## netcat + bzip2가 느린 연결에서 약간 더 빠를 수 있습니다. bzip2 -c | nc -l 1234 ## 수신 서버 # nc $ sending_ip 1234 | bzip2 -cd> file.txt
shantanuo

@ Caspar : bzip2 또는 lzma 압축을 제안하기 위해이 답변을 편집하는 것은 어떻습니까?
einpoklum

4
-q옵션을 사용하고 있음을 나타냅니다 오픈 BSD - netcat을 하면서, GNU-netcat을가 또한 매우 일반적 (기본적이다 아치 리눅스 ). gnu-netcat 구문을 포함하도록 답변을 확장 할 수 있습니까?
Sebastian

1
현재 nc 사용자는 -l 옵션에 대해 다음과 같이 말합니다. "-p, -s 또는 -z 옵션과 함께이 옵션을 사용하면 오류가 발생합니다."그러나 이상하게도 사용시 오류가 발생하지 않습니다. 'nc -l 45454'를 사용하는 것도 잘 작동한다고 생각합니다.
Claudiu

19

한 번만 움직이려면 scp를 권장합니다.

그러나이 디렉토리가 작동하고 다른 위치를 업데이트하기 위해 여러 번 이동 해야하는 경우 rsync (ssh 사용)를 사용할 수 있습니다.

rsync에는 많은 인수가 있기 때문에 일반적으로 작은 쉘에 넣습니다. 아이디어는 마지막으로 실행 된 이후 변경된 내용 만 전송하는 것입니다.

#!/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/

사용자 "nisse"를 사용하여 "/ home / media / music /"이라는 디렉토리를 로컬 컴퓨터에서 192.168.0.33 PC로 이동합니다. 그리고 로컬 PC에 존재하지 않는 대상의 모든 것을 삭제하십시오.


1
+ rsync의 경우 좀 더 빠르며 나중에 디렉토리를 동기화해야하는 경우 매우 좋습니다.
Wiesław Herr

이것은 매우 유망한 (그리고 쉽게 재사용 할 수있는) 것처럼 보이지만 공백이있는 파일과 파일이 있고 rsync 오류가 발생합니다. main.c (1348)의 구문 또는 사용 오류 (코드 1) [sender = 3.1.1] - -어떤 제안?
Torben Gundtofte-Bruun

8

오버 헤드가 IMMENSE이기 때문에 자신의 LAN 내부에서 파일을 이동하기 위해 SSH로 직접 이동하는 대안을 시도하는 것이 좋습니다. 어떤 이유로 든 이것이 효과가 없다면 Caspar의 솔루션을 사용하십시오.

소스에서 :

$ python3 -m http.server {PICK_YOUR_PORT}

목적지에서 :

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

SSH를 사용하는 것보다 가벼울뿐만 아니라 표준 CAT6 UTP에서 45 ~ 65MiB 범위의 속도로 훨씬 빠릅니다.
당신이 정말로 짜하려면 연결을 최대한를 교체 시도 wgetlftp하고 사용 pget -n20mirror -r명령.


7

netcat캐스퍼 설명과 같이 가장 빠릅니다 .

안전하고 빠른 tar& 조합을 좋아합니다 ssh.

소스에서

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

루트 권한으로 파일 권한을 유지합니다. 또는 -p양면에 사용하십시오. 또한 -S당신이 스파 스 파일이있는 경우로 간주 될 수 있습니다.

openSSH와 함께 작동하는 암호로 ssh사용 하는 경우 암호화 오버 헤드를 줄일 수 있습니다 arcfour.

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

원격 경로를 업데이트하려면 rsync완벽합니다.

rsync -av --sparse --delete -e "ssh -c arcfour" . root@targethost:/target/path

1
FWIW, 최근에 arcfour 옵션과 특정 -e 인수가없는 rsync를 사용하여 직접 연결된 두 개의 최신 랩톱간에 전송 테스트를 수행했습니다. 나는 속도의 차이를 발견하지 못했습니다.
랜디 주사기

4

LAN을 통해 절대적으로 수행 rsync해야하는 경우 중단되면 중단 된 부분을 선택 하므로을 사용 합니다. 또한 전송되는 데이터의 양을 최소화하기위한 몇 가지 다른 트릭이 있지만 음악 라이브러리를 처녀 위치로 복사하는 경우와 관련이있을 것입니다. 보안이 중요한 경우 RSYNC_RSH=ssh먼저 설정 하면 데이터가 ssh를 통해 터널링됩니다.

그러나 실제로 그렇게하고 있다면 LAN을 전혀 사용하지 않을 것입니다. 파일을 USB 하드 드라이브에 복사 한 다음 USB 하드 드라이브에서 꺼 냈습니다. 필자의 경험에 따르면 파일을 두 번 복사해야 할지라도 LAN을 통과하는 것보다 수십 배 더 빠를 수 있습니다 .USB 2.0은 480Mbps로 평가되어 기가비트 이더넷보다 짧은 것보다 빠르며 조건에 덜 민감합니다. LAN 성능이 저하됩니다. 또한 모든 관련 시스템에서 처리 할 수있는 파일 시스템을 사용하는 경우 OS와 완전히 독립적입니다. VFAT / FAT32를 사용하는 것이 좋습니다.


1
나는 (소위) 스니커 넷의 팬이기도하지만 USB 2는 480Mbps를 얻을 수 있지만 30MB / s (약 240Mbps) 만 볼 수 있습니다. 아마도 저렴한 USB-> SATA 하드웨어를 가지고있을 수도 있습니다.) 또한 FAT32는 거의 보편적이지만 4GB 파일 크기 제한으로 인해 DVD 이미지와 같은 것을 복사 할 필요가 없습니다. Windows가 제공하는 "공간 부족"오류 메시지로 인해 사람들이 너무 실망하지 않도록 지적 할 가치가 있습니다.
Caspar

@Caspar : 좋은 경고! 언급 해 주셔서 감사합니다. 나는 FAT32 파일 크기 제한을 항상 잊어 버린다 ...
Dave Sherohman

2

파일을 증분 복사 할 때 rsync를 제안합니다. 초기 업데이트를 완료 한 후에 만 ​​수정되거나 새 파일 만 복사하도록 설정할 수 있습니다. 원하는 경우 ssh를 전송 계층으로 사용할 수 있습니다.


1

많은 프로토콜에서 훌륭한 파일 동기화 프로그램 인 Unison을 사용 합니다. 당신은 그것을 사용하도록 구성 할 수 있습니다 scp, rcp, ftp두 폴더간에 파일 시스템에 심지어 로컬 또는. 네트워크를 통해 한 번에 여러 파일을 전송할 수 있으며 구성에서 조정할 수 있으므로 음악 라이브러리를 동기화하는 데 사용합니다. 음악 컬렉션을 백업하고 2-3 대의 컴퓨터에서 동기화 상태를 유지합니다. 변경된 파일 만 복사하며, 클라이언트가 파일을 변경 한시기 나 서버 파일이 변경된시기를 알 수 있도록 전송의 양쪽 끝에 색인을 유지하여 복사합니다.

마일리지는 다를 수 있지만 scp새 노래를 추가 할 때마다 전체 음악 컬렉션을 사용하는 것보다 훨씬 낫습니다. :)


0

나는 암호없는 로그인을 위해 먼저 ssh 프로세스를 따랐습니다 http://www.tecmint.com/ssh-passwordless-login-using-ssh-keygen-in-5-easy-steps/

스크립트와 텍스트 파일의 경우 다음이 잘 작동합니다.

로컬 호스트에서 원격 호스트로 데이터를 전송합니다. cat localfile | ssh <user>@<ip> "cat > <path>/<remotefile>"

원격 호스트에서 로컬 호스트로 데이터를 전송합니다. ssh <user>@<ip> "cat > <path>/<remotefile>" | cat > localfile

이것은 ssh client 또는 scp가 내장되지 않은 임베디드 시스템에서 파일을 전송하는 데 효과적입니다.

scp 없음-ssh 만.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.