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

10

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 actualizar este comando para que pueda transferir los datos a la máquina remota.

Esto está diseñado para estar en un script posterior que se supone que se ejecuta por sí solo, lo que significa que cualquier tipo de entrada requerida por el usuario lo arruinarí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!)

BrainStone
fuente
Qué se necesita para ser ftp? ¿No tienes sshacceso a esta máquina?
terdon
No tengo acceso ssh a la máquina. Es solo un servidor de respaldo que alquilo. Entonces , tiene que ser ftp o sftp.
BrainStone
@BrainStone SFTP es parte de SSH
kurtm
Lo sé. Pero está configurado de tal manera que cada conexión ssh se cierra inmediatamente. Sin embargo, SFTP funciona. Sé que es una configuración extraña, pero así es.
BrainStone
1
SFTP está disponible cuando SSH no lo está si están usando el servidor interno sftp y su shell está configurado en / sbin / nologin.
Gregg Leventhal

Respuestas:

15

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
jirib
fuente
Entonces, ¿cómo exactamente usaría esto? Quiero decir, ¿cómo puedo configurar qué archivos deben estar en la bola de alquitrán? ¿Y dónde pondría la contraseña? ¿Y cómo lo configuro para que no tenga que aceptar la huella digital de los hosts?
BrainStone
Aprenda más sobre ssh, man ssh, man ssh-agent, man ssh_config responda todas sus dudas. Qué archivos define localmente con argumentos tar, luego se canaliza a través de ssh al host remoto y la salida se redirige al archivo.
jirib
¿Es posible hacerlo sin pipa?
BrainStone
Esto tampoco puede funcionar porque debe ser sftp ( sin acceso ssh ) o ftp
BrainStone
Para ftp, vea man lftp. Si necesita tener escenarios más complicados, use 'sftp -b' y tenga un archivo con comandos o use 'documentos aquí' (<< EOF).
jirib
3

Tar no habla ftp ni sftp. Ese no es su trabajo. No puedes hacer esto solo con alquitrán. Usar las herramientas apropiadas 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 en la máquina remota.

Si no desea crear el archivo localmente porque no tiene suficiente espacio, puede crear una tubería con nombre, hacer que tar escriba en esta tubería y encontrar un cliente ftp que pueda leer desde las tuberías. Desafortunadamente, sftp se niega a 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

Ingrese su contraseña FTP ~/.netrc.

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

mkdir -p ~/net/host
sshfs host: ~/net/host
tar -cvjf ~/net/host/Backup.tar.bz2 ~/importantfiles/*
fusermount -u ~/net/host
Gilles 'SO- deja de ser malvado'
fuente