두 대의 Solaris 서버가 있습니다. server1에 파일이 있습니다 archive.tar.gz
. 파일을 추출하려면 server2로 ssh해야 합니다.
그래서 다음 명령을 작성합니다.
ssh server2 < archive.tar.gz | gunzip -c | tar -xf - -C /home/
하지만 오류가 발생합니다.
stdin이 터미널이 아니기 때문에 의사 터미널은 할당되지 않습니다.
파일을 올바르게 복사하는 방법은 무엇입니까?
답변1
나는 당신이 다음과 같은 일을 할 수 있다고 믿습니다 :
$ cat archive.tar.gz | ssh server2 "tar zxvf -"
server2에서 추출되는 디렉토리를 제어해야 하는 경우:
$ cat archive.tar.gz | ssh server2 "cd /path/to/dir; tar zxvf -"
솔라리스
귀하는 Solaris를 사용하고 있으므로 귀하의 tar 버전에는 GNU tar에서 제공하는 압축 기능이 포함되어 있지 않을 수 있습니다. 걱정하지 마십시오. 이 명령을 계속 실행할 수 있습니다. archive.tar.gz
먼저 타르볼의 압축을 풀 수 있는 명령 으로 cat을 분해하면 됩니다 .
다음과 같이 해야 합니다.
$ cat archive.tar.gz | ssh server2 "(cd /some/dir; gunzip | tar xf -)"
아니면 이거:
$ gzip -dc < sample.tar.gz | ssh server2 "cd /path/to/dir; tar xvf -"
아니면 이거:
$ gunzip sample.tar.gz | ssh server2 " cd /path/to/dir; tar xvf -"
답변2
ssh server2 < archive.tar.gz
어떤 명령도 전달하지 않으므로 ssh
원격 측에서 쉘을 실행합니다. 의 내용은 archive.tar.gz
표준 입력을 통해 쉘에 전달되므로 이를 쉘 스크립트로 구문 분석하려고 시도합니다. 유쾌함을 유발하는지 여부는 파일 내용에 따라 다릅니다.
이러한 명령을 실행하는 위치가 설명에서 명확하지 않습니다. server1에 있고 archive.tar.gz
server2에서 아카이브를 추출하려면 아카이브를 server2로 파이프하고 거기에서 extract 명령을 실행하십시오.
<archive.tar.gz ssh server2 'cd /home && gunzip | tar -xf -'
또는 server2에 로그인하여 server1의 파일 시스템을 마운트합니다.sshfs를 클릭한 다음 로컬 파일처럼 아카이브의 압축을 풉니다.
mkdir /tmp/server1
sshfs server1:/ /tmp/server1
cd /home
gunzip </tmp/server1/path/to/archive.tar.gz | tar -xf -
fusermount -u /tmp/server1
답변3
cd
다음과 같은 명령을 사용하지 않고도 아카이브를 기존의 특정 디렉터리로 확장할 수 있습니다 .
$ cat archive.tar.gz | ssh server2 "tar zxvf - -C /path/to/dir"
디렉터리가 존재하는지 모르는 경우 다음 명령을 사용할 수 있습니다.
$ cat archive.tar.gz | ssh server2 "mkdir -p /path/to/dir && tar zxvf - -C /path/to/dir"