Bagaimana membuat tar menyimpan arsip pada mesin jarak jauh menggunakan sftp atau ftp?

10

Saya ingin mencadangkan beberapa data saya yang sangat penting pada mesin jarak jauh.
Saat ini saya hanya menyimpannya ke mesin lokal saya dengan menggunakan perintah ini:tar -cvjf ~/backups/Backup.tar.bz2 ~/importantfiles/*

Saya lebih suka tidak menggunakan perintah lain untuk memindahkannya ke mesin jarak jauh, artinya saya hanya ingin perintah ini ditingkatkan sehingga dapat mentransfer data ke mesin jarak jauh.

Ini dirancang untuk menjadi skrip nanti yang seharusnya dijalankan sendiri, artinya semua jenis input pengguna yang diperlukan akan benar-benar mengacaukannya!

Sesuatu seperti

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

akan menjadi sempurna! (Tidak ada pipa (dll.), Hanya satu perintah!)

BrainStone
sumber
Apakah perlu ftp? Anda tidak memiliki sshakses ke mesin ini?
terdon
Saya tidak memiliki akses ssh ke mesin. Itu hanya server cadangan yang saya sewa. Jadi ya itu memiliki menjadi ftp atau sftp.
BrainStone
@BrainStone SFTP adalah bagian dari SSH
kurtm
Aku tahu. Tetapi sudah diatur sedemikian rupa sehingga setiap koneksi ssh ditutup dengan segera. SFTP bekerja. Saya tahu ini setup yang aneh tapi memang begitu.
BrainStone
1
SFTP tersedia ketika SSH tidak jika mereka menggunakan server internal sftp dan shell Anda diatur ke / sbin / nologin.
Gregg Leventhal

Jawaban:

15

Untuk SSH:

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

Untuk 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

SFTP lain:

outfile=/tmp/test.tar.gz
sftp -b /dev/stdin remote >/dev/null 2>&1 << EOF
cd /tmp
get $outfile
bye
EOF
echo $?
0
jirib
sumber
Jadi bagaimana tepatnya saya menggunakan ini? Maksud saya bagaimana saya bisa mengatur file mana yang harus di tar bola. Dan di mana saya akan meletakkan kata sandi? Dan bagaimana cara mengaturnya sehingga saya tidak harus menerima sidik jari host?
BrainStone
Silakan pelajari lebih lanjut tentang ssh, man ssh, man ssh-agent, man ssh_config menjawab semua keraguan Anda. File mana yang Anda tetapkan secara lokal dengan argumen tar, kemudian dipipihkan melalui ssh ke host jarak jauh dan hasilnya diarahkan ke file.
jirib
Apakah mungkin melakukannya tanpa pipa?
BrainStone
Ini juga tidak bisa bekerja karena perlu menjadi sftp ( tidak ada akses ssh ) atau ftp
BrainStone
Untuk ftp, lihat man lftp. Jika Anda perlu memiliki skenario yang lebih rumit, gunakan 'sftp -b' dan miliki file dengan perintah atau gunakan 'di sini dokumen' (<< EOF).
jirib
3

Tar tidak berbicara ftp atau sftp. Itu bukan tugasnya. Anda tidak dapat melakukan ini dengan tar saja. Menggunakan alat yang tepat untuk setiap pekerjaan dan menggabungkannya dengan shell adalah cara normal melakukan sesuatu pada sistem unix.

Solusi yang paling jelas adalah membuat arsip secara lokal, lalu menyalinnya ke mesin jarak jauh.

Jika Anda tidak ingin membuat arsip secara lokal karena Anda tidak memiliki cukup ruang, Anda dapat membuat pipa bernama, membuat tar menulis ke pipa ini, dan menemukan klien ftp yang dapat membaca dari pipa. Sayangnya, sftp menolak untuk putmenggunakan pipa. Beberapa klien FTP berfungsi, misalnya lftp:

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

Masukkan kata sandi FTP Anda ~/.netrc.

Atau, ada cara untuk membuat perintah tar Anda menyimpan ke server jarak jauh secara langsung, tetapi Anda perlu beberapa pengaturan sebelumnya. Mount server jauh lebih SSHFS atau curlftpfs .

mkdir -p ~/net/host
sshfs host: ~/net/host
tar -cvjf ~/net/host/Backup.tar.bz2 ~/importantfiles/*
fusermount -u ~/net/host
Gilles 'SANGAT berhenti menjadi jahat'
sumber