sftp 또는 ftp를 사용하여 tar를 아카이브에 저장하는 방법은 무엇입니까?


10

매우 중요한 데이터 중 일부를 원격 컴퓨터에 백업하고 싶습니다.
현재이 명령을 사용하여 로컬 컴퓨터에 저장하고 있습니다.tar -cvjf ~/backups/Backup.tar.bz2 ~/importantfiles/*

다른 명령을 사용하여 원격 시스템으로 변환하는 것을 선호하지 않습니다. 즉,이 명령을 업그레이드하여 데이터를 원격 시스템으로 전송할 수 있기를 원합니다.

이 스크립트는 나중에 자체 스크립트로 실행되도록되어 있으며, 필요한 모든 사용자 입력 유형이 완전히 엉망이 될 수 있습니다.

같은 것

tar -cvjf sftp://user:pwassword@host/Backup.tar.bz2 ~/importantfiles/*
tar -cvjf  ftp://user:pwassword@host/Backup.tar.bz2 ~/importantfiles/*

완벽 할 것이다! (파이프 등 없음, 단 하나의 명령!)


그것은 않습니다 필요 FTP로? 당신이없는 ssh이 컴퓨터에 대한 액세스를?
terdon

머신에 대한 ssh 액세스 권한이 없습니다. 내가 임대 한 백업 서버 일뿐입니다. 그래서 FTP 또는 SFTP로.
BrainStone

@BrainStone SFTP는 SSH의 일부 입니다
kurtm

알아. 그러나 모든 ssh 연결이 즉시 닫히는 방식으로 설정되었습니다. SFTP는 작동합니다. 나는 그것이 이상한 설정이라는 것을 알고 있지만 그 방식입니다.
BrainStone

1
SFTP는 sftp 내부 서버를 사용하고 있고 쉘이 / sbin / nologin으로 설정된 경우 SSH를 사용하지 않는 경우에 사용할 수 있습니다.
Gregg Leventhal

답변:


15

SSH의 경우 :

tar czf - . | ssh remote "( cd /somewhere ; cat > file.tar.gz )"

SFTP의 경우 :

outfile=/tmp/test.tar.gz
tar cvf $outfile . && echo "put $outfile" | sftp remote:/tmp/
Connecting to remote...
Changing to: /tmp/
sftp> put /tmp/test.tar.gz
Uploading /tmp/test.tar.gz to /tmp/test.tar.gz
/tmp/test.tar.gz

다른 SFTP :

outfile=/tmp/test.tar.gz
sftp -b /dev/stdin remote >/dev/null 2>&1 << EOF
cd /tmp
get $outfile
bye
EOF
echo $?
0

정확히 어떻게 사용합니까? 타르 볼에 있어야 할 파일을 어떻게 설정할 수 있습니까? 암호는 어디에 넣을까요? 호스트 지문을 받아들이지 않아도되도록 어떻게 설정합니까?
BrainStone

ssh, man ssh, man ssh-agent, man ssh_config에 대해 자세히 알아보십시오. tar 인수를 사용하여 로컬로 정의한 파일은 ssh를 통해 원격 호스트로 파이프되고 출력은 파일로 경로 재 지정됩니다.
jirib

파이프없이 할 수 있습니까?
BrainStone

이 때문에이 또한 작동하지 않을 수 있습니다 필요 SFTP (수 없는 SSH 액세스 FTP) 또는
BrainStone

ftp의 경우 man lftp를 참조하십시오. 보다 복잡한 시나리오가 필요한 경우 'sftp -b'를 사용하고 명령이있는 파일을 갖거나 'here documents'(<< EOF)를 사용하십시오.
jirib

3

Tar은 ftp 또는 sftp를 사용하지 않습니다. 그것은 그 일이 아닙니다. 타르만으로는이 작업을 수행 할 수 없습니다. 각 작업에 적절한 도구를 사용하고이를 쉘과 결합하는 것이 유닉스 시스템에서 작업을 수행하는 일반적인 방법입니다.

가장 확실한 해결책은 아카이브를 로컬로 만든 다음 원격 시스템에 복사하는 것입니다.

공간이 충분하지 않아 로컬로 아카이브를 작성하지 않으려면 명명 된 파이프를 작성하고 tar를이 파이프에 작성하고 파이프에서 읽을 수있는 (s) ftp 클라이언트를 찾을 수 있습니다. 불행히도 sftp put는 파이프를 거부합니다 . 일부 FTP 클라이언트 (예 : lftp)가 작동합니다.

mkfifo f
tar -cvjf f ~/importantfiles/* &
sleep 2
lftp -f - <<EOF
open user@host
put f Backup.tar.bz2
EOF
wait
rm f

에 FTP 비밀번호를 입력하십시오 ~/.netrc.

또는 tar 명령을 원격 서버에 직접 저장하는 방법이 있지만 일부 사전 설정이 필요합니다. SSHFS 또는 curlftpfs를 통해 원격 서버를 마운트하십시오 .

mkdir -p ~/net/host
sshfs host: ~/net/host
tar -cvjf ~/net/host/Backup.tar.bz2 ~/importantfiles/*
fusermount -u ~/net/host
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.