Wie kann ich erreichen, dass Tar das Archiv mittels SFTP oder FTP auf einem Remotecomputer speichert?

Wie kann ich erreichen, dass Tar das Archiv mittels SFTP oder FTP auf einem Remotecomputer speichert?

Ich möchte einige meiner sehr wichtigen Daten auf einem Remote-Computer sichern.
Derzeit speichere ich sie einfach mit diesem Befehl auf meinem lokalen Computer:tar -cvjf ~/backups/Backup.tar.bz2 ~/importantfiles/*

Ich möchte für die Übertragung auf den Remotecomputer keinen weiteren Befehl verwenden. Das heißt, ich möchte, dass dieser Befehl einfach aktualisiert wird, damit er die Daten auf den Remotecomputer übertragen kann.

Dies ist für den späteren Einsatz in einem Skript vorgesehen, das eigenständig ausgeführt werden soll. Dies bedeutet, dass jede Art erforderlicher Benutzereingaben das Ganze komplett durcheinanderbringen würde!

Etwas wie

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

wäre perfekt! (Keine Pipes (usw.), nur ein Befehl!)

Antwort1

Für SSH:

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

Für 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

Ein weiteres SFTP:

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

Antwort2

Tar spricht weder FTP noch SFTP. Das ist nicht seine Aufgabe. Sie können das nicht allein mit Tar tun. Die Verwendung geeigneter Tools für jede Aufgabe und deren Kombination mit der Shell ist die normale Vorgehensweise auf Unix-Systemen.

Die naheliegendste Lösung besteht darin, das Archiv lokal zu erstellen und es dann auf den Remotecomputer zu kopieren.

Wenn Sie das Archiv nicht lokal erstellen möchten, weil Sie nicht genügend Platz haben, können Sie eine benannte Pipe erstellen, tar in diese Pipe schreiben lassen und einen (S)FTP-Client finden, der aus Pipes lesen kann. Leider lehnt SFTP puteine Pipe ab. Einige FTP-Clients funktionieren, zum Beispiel lftp:

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

Geben Sie Ihr FTP-Passwort ein~/.netrc.

Alternativ gibt es eine Möglichkeit, Ihren Tar-Befehl direkt auf dem Remote-Server zu speichern, aber Sie müssen vorher einige Einstellungen vornehmen. Mounten Sie den Remote-Server überSSHFSoderAbonnieren.

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

Antwort3

Einzeilige Lösung:

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

Es erstellt einen Stream stdoutund übergibt ihn an den FTP-Server, ohne eine Datei zu erstellen. ftpIst ein üblicher FTP-Client auf allen *nix/BSD-Systemen.

verwandte Informationen