SSH를 통해 하위 디렉토리의 파일을 원격 컴퓨터로 cp하기 위해 Unix 명령을 사용할 수 있습니까?


17

~/Downloads개인용 컴퓨터의 하위 디렉토리 에 일련의 소프트웨어 파일이 다운로드되어 있습니다. 또한 bash를 사용하여을 사용하여 컴퓨터에 원격으로 연결합니다 ssh.

이 파일을 통해 ssh원격 컴퓨터 로 전송할 수 있습니까?


질문은 단일 파일 ( this file)과 여러 파일 ( a series of software files)을 나타내며 , 최상의 솔루션은 단일 파일인지 여러 파일인지에 따라 다릅니다.
— user2768

답변:


42

scp이 목적 으로 사용할 수 있습니다 . SSH 프로토콜을 사용하여 파일을 전송하는 안전한 방법입니다.

예를 들어,라는 파일 복사 yourfile.txt에서 ~/Downloads원격 컴퓨터 사용하기를 :

scp ~/Downloads/yourfile.txt your_username@remotehost.edu:/some/remote/directory

더 많은 예제를 여기에서 볼 수 있습니다 .


5
내가 생각하기 rsync에 지금도 잘 작동한다고 생각합니다
— ShanZhengYang

1
rsync는 파일로 가득 찬 하나 또는 손으로
— 인해 복잡해졌습니다

14
@Paebbels 반대로 scp위의 내용으로 바꾸면 rsync제대로 작동합니다.
— 8bittree

rsync단순한 경우에는 "그냥 작동"하고 다른 경우에는 훨씬 더 효율적일 수 있기 때문에 단일 파일까지 모든 것에 사용하는 경향이 있습니다 . 중 하나를 사용하는 경우 scp또는 rsync아무것도하지 이미 압축 및 / 또는 암호화에, (에서 압축 옵션을 설정하는 기억 -C을 위해 scp, -z또는 --compress를 들어 rsync). 실제로 나는 습관에 의해 켜집니다-rPi와 같이 제한된 CPI 전력으로 느린 저전력 장치를 사용하는 경우 상황이 느려지는 환경을 찾는 것은 매우 드 rare니다.
— David Spillett

37

scp이것에 대한 올바른 도구 이지만 분명히 어떤 이유로 사용할 수 없다면 로컬 컴퓨터에서 다음과 같은 작업을 수행하여 디렉토리 구조를 원격 컴퓨터에 복사 할 수 있습니다.

tar -c . | ssh <remote> tar -x

이 의지 tar하는 현재 로컬 컴퓨터의 디렉토리 및 쓰기 tar에 stdout있는 다음에 파이프됩니다 ssh그것에서 읽는 파일 압축을 풀어야하는 원격 명령을 실행할 명령stdin

-f -작성 및 추출 끝 둘 다에서 기본값이되는 것에 대한 Dietrich Epp의 의견을 반영하도록 편집 되었으므로 명시 적으로 지정할 필요가 없습니다.


7
이 작업을 수행하는 경우 홈 디렉토리가 아닌 다른 곳을 추출 -C basedir하기 tar위해 인수 를 추가하고 싶을 것입니다 .
— Dougal

17

드문 경우 이상 으로이 작업을 수행 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). 자세한 내용은 온라인 자습서 를 참조하십시오 .

그건 그렇고, 내가 원격 서버에서 파일을 관리하는 가장 좋아하는 방법입니다. 나는 보통 이런 방식으로 하나의 프로덕션 서버와 두 개의 개발 서버를 마운트하고 일반적인 파일 찾아보기 워크 플로를 사용합니다.


그런 다음 작업을 가장 잘 수행하는 데 도움이되는 sshfs 옵션을 확인하십시오. 예를 들면 사용자 / 그룹 ID 매핑으로 시작 -o idmap={none,user,file},gid=<remote_user_group_ID>,allow_other하고 -C가난한 대역폭 경우 압축. 그것이 잘 작동하자마자, 나는 ssh에 먼 파일 시스템을 빠르게 마운트하기 위해 명령에 대한 별칭을 개인적으로 추가합니다. @ Benjamin_Staton 적어도 적절한 사용자 / 그룹 매핑이 없으면 sudo 또는 root를 사용하지 않습니다.
— tuk0z

9

처음에는 scp(copy over ssh)와 (과)의 실제 차이가 없습니다 rsync.

후속 실행은 이미 존재하는 파일을 복사하지 않고 rsync를 사용하면 도움이됩니다.

rsync -avH ~/Downloads  username@remotehost:Downloads
  • -a 모든 파일
  • -v 장황하게
  • -H "심볼릭 링크를 알아 내고 옳은 일을하라"
  • 그런 다음 소스 및 대상 경로. 소스에서 와일드 카드를 사용하거나 전체 디렉토리를 동기화 할 수 있습니다.

다른 유용한 플래그는 다음과 같습니다.

  • --delete 소스에 더 이상 존재하지 않는 대상에서 파일을 삭제합니다.
  • --dry-run 테스트 용-매우 편리합니다 --delete.

ssh암호를 설정하지 않은 경우 키를 사용 하여 암호없는 로그인도 수행합니다.

실행 rsync이 끝나면 일반 복사를 다시 수행하는 것보다 몇 배나 빠릅니다.


1
-H실제로 하드 링크의 경우 소스 디렉토리 구조에서 둘 이상의 위치에 링크 될 때 동일한 컨텐츠가 두 번 이상 전송되는 것을 중지합니다 (그러나 큰 디렉토리 구조에서는 프로세스의 효율성을 떨어 뜨릴 수 있음). 심볼릭 링크에는 영향을 미치지 않지만 -a/에 포함 된 일부 옵션은 --archive심볼릭 링크 처리 방법에 영향을줍니다.
— David Spillett

4

위의 답변에 추가하십시오. 때로는 원격 경로가 확실하지 않습니다. 이 경우 sftp먼저 필요한 위치로 이동 한 다음 get 또는 put을 사용하여 실제로 파일을 다운로드하거나 업로드합니다.

무언가를 항상 동기화 상태로 유지하고 원격 시스템에있는 일부 파일을 로컬로 실행하려는 경우에도 sshfs효과적입니다.


-1

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로 복사하는 경우 매번 비밀번호를 입력해야하므로 자동화의 즐거움이 없어집니다.


downvoted 한 사람이 downvoted 이유에 대한 의견을 남길 수 있습니까? 다운 투표는 유익한 피드백 없이는 의미가 없습니다. 감사합니다. OP의 특정 질문에 직접 관련된 답변을 제시했습니다. 새로운 기술을 도입하거나 대체 경로를 제안하지 않습니다. 왜? OP는 대체 경로를 사용하고 싶지 않을 수도 있습니다.
— 앤드류
당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.