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

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

두 대의 Linux 컴퓨터 간에 파일(음악 폴더)을 전송하고 싶습니다. 이 작업을 수행하는 가장 좋은 방법을 검색한 후 다음과 같은 방법이 있음을 확인했습니다.많이이를 수행하는 방법 중 하나입니다. 나는 이것이 요청되었다는 것을 안다많이,어디에나그리고항상. 이것의 주요 문제는 2011년에 Linux 초보자를 위해 이 작업을 수행하는 가장 좋은 방법에 대한 명확하고 최근의 합의가 없다는 것입니다(일부 매개변수에 따라 다름).

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

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

  • SSH
  • sshfs
  • scp
  • SFTP
  • nfs
  • 삼바
  • 주는 사람

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

답변1

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

SFTP는 원격 파일 시스템에서 많은 작업을 쉽게 수행할 수 있게 해주는 도구입니다. FTP처럼 작동하지만 SSH를 통해 실행되므로 안전하고 SSH 서버만 필요합니다. man sftp사용법을 모두 알려드리겠습니다. 저는 단지 두 컴퓨터 사이에 폴더를 이동하는 데에만 SFTP를 사용하지 않습니다. 다른 컴퓨터에서 파일을 재배열하는 경우처럼 해야 할 작업이 많을 때 SFTP가 더 유용합니다.

SSHFS는 SFTP를 파일 시스템으로 확장합니다. 가상 호스트를 파일 시스템에 마운트할 수 있으므로 네트워크 작업이 완전히 투명하게 이루어집니다. SSHFS는 일회성 파일 전송이 아닌 반영구적 설정을 위한 것입니다. 설정하려면 더 많은 노력이 필요합니다. 이에 대한 내용은 다음에서 읽을 수 있습니다.프로젝트 웹사이트.

혼합 OS 환경에서 작업해야 한다면 Samba가 차선책이 될 것입니다. Windows와 OS X는 Samba를 완전히 자동으로 지원하며 Linux도 사용하기 어려울 때도 있습니다.

답변2

보안이 중요하지 않은 경우에 제가 개인적으로 가장 좋아하는 것은넷캣+타르:

디렉토리를 보내려면 전송을 수행하는 컴퓨터에서 내용을 보내려는 디렉토리 내부로 cd하고 다음을 수행하십시오.

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

콘텐츠를 수신하는 컴퓨터에서 콘텐츠를 표시할 위치로 이동하여 다음을 수행합니다.

nc -w 10 $REMOTE_HOST 45454 | tar -xz

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

여기서 실제로 일어나는 일은 '수신' 컴퓨터가 포트 45454에서 보내는 컴퓨터에 연결하고 디렉터리의 tar'd 및 gzip'd 내용을 수신하고 이를 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

답변3

일회성 이동에는 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에 존재하지 않는 대상의 모든 항목을 삭제하십시오.

답변4

가장 빠른 것은 아마도 netcat(caspar가 설명한 대로) 것입니다.

나는 안전하면서도 빠른 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

관련 정보