Como fazer o tar salvar o arquivo em uma máquina remota usando sftp ou ftp?

Como fazer o tar salvar o arquivo em uma máquina remota usando sftp ou ftp?

Gostaria de fazer backup de alguns dos meus dados muito importantes em uma máquina remota.
Atualmente estou apenas salvando-o em minha máquina local usando este comando:tar -cvjf ~/backups/Backup.tar.bz2 ~/importantfiles/*

Eu preferiria não usar outro comando para transferi-lo para a máquina remota, o que significa que gostaria apenas que esse comando fosse atualizado para que ele pudesse transferir os dados para a máquina remota.

Isso foi projetado para estar em um script posterior que deve ser executado por conta própria, o que significa que qualquer tipo de entrada necessária do usuário iria atrapalhar completamente!

Algo como

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

seria perfeito! (Sem pipes (etc.), apenas um comando!)

Responder1

Para SSH:

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

Para 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

Outro SFTP:

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

Responder2

Tar não fala ftp ou sftp. Esse não é o seu trabalho. Você não pode fazer isso apenas com alcatrão. Usar ferramentas apropriadas para cada trabalho e combiná-las com o shell é a maneira normal de fazer as coisas em sistemas Unix.

A solução mais óbvia é criar o arquivo localmente e depois copiá-lo para a máquina remota.

Se você não deseja criar o arquivo localmente porque não tem espaço suficiente, você pode criar um canal nomeado, fazer o tar gravar nesse canal e encontrar um cliente (s)ftp que possa ler os canais. Infelizmente, o sftp se recusa a putum pipe. Alguns clientes FTP funcionam, por exemplo lftp:

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

Coloque sua senha FTP~/.netrc.

Como alternativa, existe uma maneira de salvar seu comando tar diretamente no servidor remoto, mas você precisa de alguma configuração prévia. Monte o servidor remotoSSHFSoucurlftpfs.

mkdir -p ~/net/host
sshfs host: ~/net/host
tar -cvjf ~/net/host/Backup.tar.bz2 ~/importantfiles/*
fusermount -u ~/net/host

Responder3

solução de uma linha:

tar Jcpvf - / | ftp -u ftp://user:[email protected]/full.backup.tar.xz -

ele cria um fluxo stdoute o passa para o servidor FTP sem criar arquivo. ftpé um cliente FTP comum em qualquer sistema *nix/BSD.

informação relacionada