¿Cómo hacer que tar guarde el archivo en una máquina remota usando sftp o ftp?

¿Cómo hacer que tar guarde el archivo en una máquina remota usando sftp o ftp?

Me gustaría hacer una copia de seguridad de algunos de mis datos muy importantes en una máquina remota.
Actualmente solo lo estoy guardando en mi máquina local usando este comando:tar -cvjf ~/backups/Backup.tar.bz2 ~/importantfiles/*

Preferiría no usar otro comando para transferirlo a la máquina remota, lo que significa que me gustaría simplemente actualizar este comando para que pueda transferir los datos a la máquina remota.

Esto está diseñado para estar en un script más adelante que se supone que se ejecuta por sí solo, lo que significa que cualquier tipo de entrada requerida por parte del usuario lo estropearía por completo.

Algo como

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

¡seria perfecto! (Sin tuberías (etc.), ¡solo un comando!)

Respuesta1

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

Otro SFTP:

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

Respuesta2

Tar no habla ftp ni sftp. Ese no es su trabajo. No puedes hacer esto solo con alquitrán. Usar las herramientas adecuadas para cada trabajo y combinarlas con el shell es la forma normal de hacer las cosas en sistemas Unix.

La solución más obvia es crear el archivo localmente y luego copiarlo a la máquina remota.

Si no desea crear el archivo localmente porque no tiene suficiente espacio, puede crear una canalización con nombre, hacer que tar escriba en esta canalización y encontrar un cliente (s)ftp que pueda leer desde las canalizaciones. Desafortunadamente, SFTP se niega a utilizar putuna tubería. Algunos clientes FTP funcionan, por ejemplo lftp:

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

Introduzca su contraseña FTP~/.netrc.

Alternativamente, hay una manera de hacer que su comando tar se guarde directamente en el servidor remoto, pero necesita alguna configuración previa. Monte el servidor remoto sobreSSHFSocurlftpfs.

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

Respuesta3

solución de una línea:

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

crea una secuencia stdouty la pasa al servidor ftp sin crear un archivo. ftpes un cliente ftp habitual en cualquier sistema *nix/BSD.

información relacionada