कैसे एक रिमोट मशीन पर संग्रह को बचाने के लिए टाट बचाने के लिए sftp या ftp का उपयोग करें?


10

मैं रिमोट मशीन पर अपने कुछ बहुत महत्वपूर्ण डेटा का बैकअप लेना चाहूंगा।
वर्तमान में मैं इस कमांड का उपयोग करके इसे अपने स्थानीय मशीन में सहेज रहा हूं:tar -cvjf ~/backups/Backup.tar.bz2 ~/importantfiles/*

मैं इसे रिमोट मशीन में स्थानांतरित करने के लिए किसी अन्य कमांड का उपयोग नहीं करना पसंद करूंगा, जिसका अर्थ है कि मैं सिर्फ इस कमांड को अपग्रेड करना चाहता हूं ताकि यह रिमोट मशीन को डेटा स्थानांतरित कर सके।

इसे बाद में एक स्क्रिप्ट में बनाया गया है जिसे अपने आप चलाने के लिए तैयार किया गया है, जिसका अर्थ है कि किसी भी प्रकार के आवश्यक उपयोगकर्ता इनपुट को पूरी तरह से गड़बड़ कर देगा!

कुछ इस तरह

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

सटीक होगा! (कोई पाइप (आदि), सिर्फ एक कमांड!)


क्या इसे ftp करने की आवश्यकता है? आपके पास sshइस मशीन तक पहुंच नहीं है ?
terdon

मेरे पास मशीन तक पहुंच नहीं है। यह सिर्फ एक बैकअप सर्वर है जिसे मैं किराए पर देता हूं। तो हाँ यह है एफ़टीपी या SFTP किया जाना है।
ब्रेनस्टोन

@BrainStone SFTP SSH का हिस्सा है
kurtm

मुझे पता है। लेकिन इसे इस तरह से सेट किया जाता है कि हर ssh कनेक्शन तुरंत बंद हो जाता है। SFTP हालांकि काम करता है। मुझे पता है कि यह एक अजीब सेटअप है लेकिन यही तरीका है।
ब्रेनस्टोन

1
एसएफटीपी तब उपलब्ध होता है जब एसएसएच नहीं होता है यदि वे sftp आंतरिक सर्वर का उपयोग कर रहे हैं और आपका शेल / sbin / nologin पर सेट है।
ग्रेग लेवेंथल

जवाबों:


15

SSH के लिए:

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

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:

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

तो मैं वास्तव में इसका उपयोग कैसे करूंगा? मेरा मतलब है कि मैं कैसे सेट कर सकता हूं कि टार बॉल में कौन सी फाइलें होनी चाहिए। और मैं पासवर्ड कहां डालूंगा? और मैंने इसे कैसे सेट किया ताकि मुझे मेजबान फिंगरप्रिंट को स्वीकार न करना पड़े?
ब्रेनस्टोन

कृपया ssh, man ssh, man ssh-agent, man ssh_config के बारे में अधिक जानें। आप स्थानीय रूप से टार की दलीलों के साथ कौन सी फाइलें परिभाषित करते हैं, फिर इसे ssh के माध्यम से दूरस्थ होस्ट तक पहुंचाया जाता है और आउटपुट को फाइल पर रीडायरेक्ट किया जाता है।
जिरिब

क्या बिना पाइप के ऐसा करना संभव है?
ब्रेनस्टोन

यह भी काम नहीं कर सकता क्योंकि इसमें sftp ( कोई ssh एक्सेस ) या ftp होना जरूरी है
BrainStone

Ftp के लिए, आदमी को देखें lftp। यदि आपको अधिक जटिल परिदृश्यों की आवश्यकता होती है, तो 'sftp -b' का उपयोग करें और कमांड के साथ एक फ़ाइल है या 'यहाँ दस्तावेज़' (<< EOF) का उपयोग करें।
जिरिब

3

टार ftp या sftp नहीं बोलता है। वह इसका काम नहीं है। आप अकेले टार के साथ ऐसा नहीं कर सकते। प्रत्येक कार्य के लिए उपयुक्त उपकरणों का उपयोग करना और उन्हें शेल के साथ जोड़ना यूनिक्स प्रणालियों पर काम करने का सामान्य तरीका है।

सबसे स्पष्ट समाधान स्थानीय स्तर पर संग्रह बनाना है, फिर इसे दूरस्थ मशीन पर कॉपी करें।

यदि आप संग्रह को स्थानीय रूप से नहीं बनाना चाहते हैं क्योंकि आपके पास पर्याप्त जगह नहीं है, तो आप एक नामांकित पाइप बना सकते हैं, इस पाइप को टार राइट कर सकते हैं और एक (एस) एफ़टीपी ग्राहक ढूंढ सकते हैं जो पाइप से पढ़ सकते हैं। दुर्भाग्य से, sftp putएक पाइप के लिए मना कर दिया । कुछ FTP क्लाइंट काम करते हैं, उदाहरण के लिए 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 पासवर्ड डालें ~/.netrc

वैकल्पिक रूप से, आपके टार कमांड को सीधे दूरस्थ सर्वर पर सहेजने का एक तरीका है, लेकिन आपको कुछ पूर्व सेटअप की आवश्यकता है। से अधिक दूरस्थ सर्वर माउंट sshfs या curlftpfs

mkdir -p ~/net/host
sshfs host: ~/net/host
tar -cvjf ~/net/host/Backup.tar.bz2 ~/importantfiles/*
fusermount -u ~/net/host
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.