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

9

Eu gostaria de fazer backup de alguns dos meus dados muito importantes em uma máquina remota.
Atualmente estou apenas salvando na 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 de ter esse comando sendo atualizado para que ele possa transferir os dados para a máquina remota.

Isso foi projetado para estar em um script mais tarde que é suposto para ser executado por conta própria, o que significa que qualquer tipo de entrada de usuário necessária seria completamente bagunçada!

Algo como

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

seria perfeito! (Nenhum cano (etc.), apenas um comando!)

    
por BrainStone 14.10.2013 / 15:17

2 respostas

14

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
    
por 14.10.2013 / 15:20
3

Alcatrão não fala ftp ou sftp. Esse não é o seu trabalho. Você não pode fazer isso apenas com alcatrão. Usar as ferramentas apropriadas para cada tarefa 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 quer criar o arquivo localmente porque você não tem espaço suficiente, você pode criar um pipe nomeado, fazer tar write neste pipe e encontrar um (s) cliente ftp que possa ler dos pipes . Infelizmente, o sftp se recusa a put de um 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 de FTP em ~/.netrc .

Como alternativa, existe uma maneira de fazer com que seu comando tar seja salvo diretamente no servidor remoto, mas você precisa de alguma configuração anterior. Monte o servidor remoto em SSHFS ou curlftpfs .

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