Come fare tar salvare l'archivio su una macchina remota usando sftp o ftp?


10

Vorrei eseguire il backup di alcuni dei miei dati molto importanti su una macchina remota.
Attualmente sto solo salvandolo sul mio computer locale usando questo comando:tar -cvjf ~/backups/Backup.tar.bz2 ~/importantfiles/*

Preferirei non usare un altro comando per trasferirlo sulla macchina remota, il che significa che vorrei semplicemente aggiornare questo comando in modo che potesse trasferire i dati sulla macchina remota.

Questo è progettato per essere in uno script in seguito che dovrebbe essere eseguito da solo, il che significa che qualsiasi tipo di input utente richiesto lo rovinerebbe completamente!

Qualcosa di simile a

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

sarebbe perfetto! (Niente pipe (ecc.), Solo un comando!)


Ha bisogno di essere ftp? Non hai sshaccesso a questa macchina?
terdon

Non ho accesso ssh alla macchina. È solo un server di backup che affitto. Quindi , deve essere ftp o sftp.
BrainStone,

@BrainStone SFTP fa parte di SSH
kurtm il

Lo so. Ma è impostato in modo tale che ogni connessione SSH venga chiusa immediatamente. SFTP funziona però. So che è una configurazione strana ma è così.
BrainStone,

1
SFTP è disponibile quando SSH non lo è se utilizzano il server interno sftp e la shell è impostata su / sbin / nologin.
Gregg Leventhal,

Risposte:


15

Per SSH:

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

Per 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

Un altro SFTP:

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

Quindi, come dovrei usarlo esattamente? Voglio dire come posso impostare quali file dovrebbero essere nella tar ball. E dove metterei la password? E come lo configuro in modo da non dover accettare l'impronta digitale degli host?
BrainStone,

Per saperne di più su ssh, man ssh, man ssh-agent, man ssh_config rispondi a tutti i tuoi dubbi. Quali file vengono definiti localmente con argomenti tar, quindi viene reindirizzato tramite ssh all'host remoto e l'output viene reindirizzato al file.
jirib,

È possibile farlo senza una pipa?
BrainStone,

Anche questo non può funzionare perché deve essere sftp ( nessun accesso ssh ) o ftp
BrainStone

Per ftp, vedi man lftp. Se hai bisogno di scenari più complicati, usa 'sftp -b' e disponi di un file con comandi o usa 'qui documenti' (<< EOF).
jirib,

3

Tar non parla ftp o sftp. Non è il suo lavoro. Non puoi farlo solo con tar. L'uso di strumenti adeguati per ogni lavoro e la loro combinazione con la shell è il modo normale di fare cose su sistemi unix.

La soluzione più ovvia è creare l'archivio localmente, quindi copiarlo sul computer remoto.

Se non si desidera creare l'archivio localmente perché non si dispone di spazio sufficiente, è possibile creare una pipe denominata, far scrivere tar su questa pipe e trovare un client ftp in grado di leggere dalle pipe. Sfortunatamente, sftp rifiuta putuna pipe. Alcuni client FTP funzionano, ad esempio lftp:

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

Inserisci la tua password FTP ~/.netrc.

In alternativa, esiste un modo per salvare direttamente il comando tar sul server remoto, ma è necessaria una configurazione precedente. Montare il server remoto su SSHFS o curlftpfs .

mkdir -p ~/net/host
sshfs host: ~/net/host
tar -cvjf ~/net/host/Backup.tar.bz2 ~/importantfiles/*
fusermount -u ~/net/host
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.