답변:
scp
이 목적 으로 사용할 수 있습니다 . SSH 프로토콜을 사용하여 파일을 전송하는 안전한 방법입니다.
예를 들어,라는 파일 복사 yourfile.txt
에서 ~/Downloads
원격 컴퓨터 사용하기를 :
scp ~/Downloads/yourfile.txt your_username@remotehost.edu:/some/remote/directory
더 많은 예제를 여기에서 볼 수 있습니다 .
rsync
에 지금도 잘 작동한다고 생각합니다
scp
위의 내용으로 바꾸면 rsync
제대로 작동합니다.
rsync
단순한 경우에는 "그냥 작동"하고 다른 경우에는 훨씬 더 효율적일 수 있기 때문에 단일 파일까지 모든 것에 사용하는 경향이 있습니다 . 중 하나를 사용하는 경우 scp
또는 rsync
아무것도하지 이미 압축 및 / 또는 암호화에, (에서 압축 옵션을 설정하는 기억 -C
을 위해 scp
, -z
또는 --compress
를 들어 rsync
). 실제로 나는 습관에 의해 켜집니다-rPi와 같이 제한된 CPI 전력으로 느린 저전력 장치를 사용하는 경우 상황이 느려지는 환경을 찾는 것은 매우 드 rare니다.
scp
이것에 대한 올바른 도구 이지만 분명히 어떤 이유로 사용할 수 없다면 로컬 컴퓨터에서 다음과 같은 작업을 수행하여 디렉토리 구조를 원격 컴퓨터에 복사 할 수 있습니다.
tar -c . | ssh <remote> tar -x
이 의지 tar
하는 현재 로컬 컴퓨터의 디렉토리 및 쓰기 tar
에 stdout
있는 다음에 파이프됩니다 ssh
그것에서 읽는 파일 압축을 풀어야하는 원격 명령을 실행할 명령stdin
-f -
작성 및 추출 끝 둘 다에서 기본값이되는 것에 대한 Dietrich Epp의 의견을 반영하도록 편집 되었으므로 명시 적으로 지정할 필요가 없습니다.
-C basedir
하기 tar
위해 인수 를 추가하고 싶을 것입니다 .
드문 경우 이상 으로이 작업을 수행 sshfs
하려면 FUSE (Linux, * BSD, Mac OS X)를 지원하는 유닉스 계열을 사용하는 경우 원격 파일 시스템을 마운트하는 것이 좋습니다 . ~ / remote-server라고하는 홈 디렉토리 아래에 디렉토리를 만듭니다.
$ mkdir ~/remote-server
그런 다음로 원격 파일 시스템을 마운트하십시오 sshfs
. "yourserver.com"을 원격 시스템의 호스트 이름으로 바꾸고 "원격 디렉토리 이름"을 원격 시스템에서 사용중인 디렉토리로 바꾸십시오.
$ sudo sshfs username@yourserver.com:/name/of/remote/directory ~/remote-server/
이 작업이 완료되면 원격 디렉토리는 파일 시스템의 일부이며 다음을 포함하여 모든 일반 도구를 사용할 수 있습니다 cp
.
$ cp ~/Downloads/your-files ~/remote-server
아직 sshfs
설치 하지 않은 경우 패키지 관리자를 사용하여 컴퓨터에 설치할 수 있어야합니다 ( sshfs
또는 이름이 지정된 패키지를 찾으십시오 fuse-sshfs
). 자세한 내용은 온라인 자습서 를 참조하십시오 .
그건 그렇고, 내가 원격 서버에서 파일을 관리하는 가장 좋아하는 방법입니다. 나는 보통 이런 방식으로 하나의 프로덕션 서버와 두 개의 개발 서버를 마운트하고 일반적인 파일 찾아보기 워크 플로를 사용합니다.
-o idmap={none,user,file},gid=<remote_user_group_ID>,allow_other
하고 -C
가난한 대역폭 경우 압축. 그것이 잘 작동하자마자, 나는 ssh에 먼 파일 시스템을 빠르게 마운트하기 위해 명령에 대한 별칭을 개인적으로 추가합니다. @ Benjamin_Staton 적어도 적절한 사용자 / 그룹 매핑이 없으면 sudo 또는 root를 사용하지 않습니다.
처음에는 scp
(copy over ssh
)와 (과)의 실제 차이가 없습니다 rsync
.
후속 실행은 이미 존재하는 파일을 복사하지 않고 rsync를 사용하면 도움이됩니다.
rsync -avH ~/Downloads username@remotehost:Downloads
-a
모든 파일-v
장황하게-H
"심볼릭 링크를 알아 내고 옳은 일을하라"다른 유용한 플래그는 다음과 같습니다.
--delete
소스에 더 이상 존재하지 않는 대상에서 파일을 삭제합니다.--dry-run
테스트 용-매우 편리합니다 --delete
.ssh
암호를 설정하지 않은 경우 키를 사용 하여 암호없는 로그인도 수행합니다.
실행 rsync
이 끝나면 일반 복사를 다시 수행하는 것보다 몇 배나 빠릅니다.
-H
실제로 하드 링크의 경우 소스 디렉토리 구조에서 둘 이상의 위치에 링크 될 때 동일한 컨텐츠가 두 번 이상 전송되는 것을 중지합니다 (그러나 큰 디렉토리 구조에서는 프로세스의 효율성을 떨어 뜨릴 수 있음). 심볼릭 링크에는 영향을 미치지 않지만 -a
/에 포함 된 일부 옵션은 --archive
심볼릭 링크 처리 방법에 영향을줍니다.
ssh와 매우 비슷한 일을하고 있습니다. Visual Studio 용 사용자 지정 빌드 도구를 만들었으며 기본적으로 VS에서 ssh 명령을 실행하여 내 코드를 대상 컴퓨터에 복사 한 다음 해당 대상 컴퓨터에서 컴파일합니다.
ssh userB @ hostB 'cp /network/path/of/source/file.ext /path/of/final/file.ext; ./runCustomCommand '
작은 따옴표와 세미콜론을 사용하십시오. 전자는 ssh를 통해 명령을 hostB에 캡슐화하고 후자는 hostA에서 하나의 ssh 명령으로 여러 hostB 시스템 명령을 실행할 수 있습니다.
이 작업을 수행하려면 userA @ hostA가되고 hostB에 userB로 로그인 할 수 있도록 시작 시스템에서 ssh 키를 설정해야합니다. userA @ hostA에 대한 공개 ssh 키를 작성하는 프로세스는 잘 문서화되어 있습니다. userA에 대해 hostA에 사용자 A의 공개 키를 작성하지 않고 해당 키를 hostB에 userB로 복사하는 경우 매번 비밀번호를 입력해야하므로 자동화의 즐거움이 없어집니다.
this file
)과 여러 파일 (a series of software files
)을 나타내며 , 최상의 솔루션은 단일 파일인지 여러 파일인지에 따라 다릅니다.