기본적으로 원격 시스템의 디렉토리를 tar/gz로 지정하고 원격 시스템에서 로컬 시스템에 다시 연결할 필요 없이 로컬 시스템에 파일을 저장하고 싶습니다. SSH를 통해 이를 수행할 수 있는 방법이 있습니까? tar 파일은 원격 컴퓨터에 저장할 필요가 없으며 로컬 컴퓨터에만 저장할 수 있습니다. 가능합니까?
답변1
tar
ssh 명령을 사용하여 이 작업을 수행할 수 있으며 표준 출력에 아카이브를 생성하도록 지시하면 됩니다 .
ssh remote.example.com 'cd /path/to/directory && tar -cf - foo | gzip -9' >foo.tgz
또 다른 방법은 원격 시스템의 파일 시스템을 마운트하는 것입니다. 이는 다른 시스템에서 많은 파일 작업을 수행하려는 경우 더 편리하지만 일회성 아카이브 생성에는 과도한 작업입니다.SSHFS(ㅏ퓨즈파일 시스템). SSH 수준에서 압축을 활성화해야 합니다.
mkdir ~/net/remote.example.com
sshfs -C remote.example.com:/ ~/net/remote.example.com
tar -czf foo.tgz -C ~/net/remote.example.com/path/to/directory foo
답변2
원격 대상에 복사하려면 이 명령을 사용하십시오.
tar -c --zstd <src files> | ssh user@target_host "cd target_dir && tar -x --zstd"
타르 마크:
-c: 새 tar 출력 생성(기본값은 stdout)
--zstd: zstd 압축 사용(tar의 알고리즘 gzip보다 빠릅니다.)
-x: 출력 추출(기본값은 표준 입력)
벤치마킹을 위한 회선 속도 측정:
tar -c --zstd <src files> | pv --timer --rate | ssh user@target_host "cd target_dir && tar -x --zstd"
압축 벤치마크
환경: 노트북과 데스크톱 간 로컬 Wi-Fi(~40MiB/s로 제한)
압축: 0:04:59
시간: 0:03:04
답변3
전송을 위해 디렉토리나 파일을 압축하여 복사하는 간단한 방법:
$ ssh domain.net 'ls foo'
file1 file2
$ ssh domain.net 'tar czf - foo' | tar xz
$ ls foo
file1 file2