Sftp veya ftp kullanarak tar'ın arşivi uzak bir makineye kaydetmesini nasıl sağlayabilirim?


10

Çok önemli verilerimin bir kısmını uzak bir makineye yedeklemek istiyorum.
Şu anda bu komutu kullanarak yerel makineme kaydediyorum:tar -cvjf ~/backups/Backup.tar.bz2 ~/importantfiles/*

Uzak makineye aktarmak için başka bir komut kullanmamayı tercih ederim, yani bu komutun uzak makineye veri aktarabilmesi için sadece bu komutun yükseltilmesini istiyorum.

Bu, daha sonra kendi başına çalışması gereken bir komut dosyasında olacak şekilde tasarlanmıştır, yani her türlü gerekli kullanıcı girişi tamamen bozulur!

Gibi bir şey

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

mükemmel olurdu! (Boru yok (vb.), Sadece bir komut!)


Ftp olması gerekiyor mu ? sshBu makineye erişiminiz yok mu?
terdon

Makineye ssh erişimim yok. Sadece kiraladığım bir yedekleme sunucusu. Yani evet bu vardır ftp veya sftp olmak.
BrainStone

@BrainStone SFTP olan kısmı SSH
kurtm

Biliyorum. Ancak her ssh bağlantısının hemen kapanacağı bir şekilde kurulur. SFTP olsa da çalışır. Garip bir kurulum olduğunu biliyorum ama bu böyle.
BrainStone

1
SFTP, sftp dahili sunucusu kullanıyorsa ve kabuğunuz / sbin / nologin olarak ayarlanmışsa SSH olmadığında kullanılabilir.
Gregg Leventhal

Yanıtlar:


15

SSH için:

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

SFTP için:

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

Başka bir SFTP:

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

Peki bunu tam olarak nasıl kullanırım? Yani tar topunda hangi dosyaların olması gerektiğini nasıl ayarlayabilirim. Parolayı nereye koyacağım? Ve ana bilgisayarların parmak izini kabul etmek zorunda kalmayacak şekilde nasıl ayarlayabilirim?
BrainStone

Ssh hakkında daha fazla bilgi edinin, adam ssh, adam ssh-ajan, adam ssh_config tüm şüphelerinize cevap. Tar argümanlarıyla yerel olarak tanımladığınız dosyalar, daha sonra ssh ile uzak ana bilgisayara aktarılır ve çıktı dosyaya yönlendirilir.
jirib

Piposuz yapmak mümkün mü?
BrainStone

Bunun nedeni de çalışamaz ihtiyacı sftp (olmaya hiçbir ssh erişimi ftp) ya da
BrainStone

Ftp için, bkz. Adam lftp. Daha karmaşık senaryolara ihtiyacınız varsa, 'sftp -b' kullanın ve komutları olan bir dosyaya sahip olun veya 'here belgeleri' (<< EOF) kullanın.
jirib

3

Tar ftp veya sftp konuşmuyor. Bu onun işi değil. Bunu sadece katranla yapamazsın. Her iş için uygun araçları kullanmak ve bunları kabukla birleştirmek, unix sistemlerde bir şeyler yapmanın normal yoludur.

En belirgin çözüm, arşivi yerel olarak oluşturmak ve daha sonra uzak makineye kopyalamaktır.

Yeterli alanınız olmadığı için arşivi yerel olarak oluşturmak istemiyorsanız, adlandırılmış bir kanal oluşturabilir, bu boruya tar yazma işlemi yapabilir ve borulardan okuyabilecek bir (s) ftp istemcisi bulabilirsiniz. Ne yazık ki, sftp putbir boruyu reddediyor . Bazı FTP istemcileri çalışır, örneğin lftp:

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

FTP şifrenizi girin ~/.netrc.

Alternatif olarak, tar komutunuzun doğrudan uzak sunucuya kaydedilmesini sağlamanın bir yolu vardır, ancak önceden ayarlamanız gerekir. Uzak sunucuyu SSHFS veya curlftpfs üzerine bağlayın .

mkdir -p ~/net/host
sshfs host: ~/net/host
tar -cvjf ~/net/host/Backup.tar.bz2 ~/importantfiles/*
fusermount -u ~/net/host
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.