SSH स्वचालित रिमोट बैक अप


16

मेरे पास दो मशीनें हैं, Aऔर B। मशीन में Assh कर सकते हैं BAबहुत सारी खाली जगह है। Bडेटा एक तरह की जोखिम भरी स्थिति में है। मैं स्वचालित रूप Bसे सभी डेटा का बैकअप कैसे ले सकता हूं Aयह बहुत लगातार होने की जरूरत नहीं है, लेकिन यह हाथों से मुक्त होना चाहिए। हर बार Aबूट अप लगातार पर्याप्त होगा। मुझे लगता है कि सिंक ऐसा कर सकता है।

जवाबों:


11

अधिकांश लिनक्स डिस्ट्रोस में इसे दैनिक रूप से करने के लिए, आपको बस एक स्क्रिप्ट में rsyncकमांड ( @ गाइडो के उत्तर के अनुसार ) डालनी चाहिए और स्क्रिप्ट को /etc/cron.dailyनिर्देशिका में रखना चाहिए । जब तक anacronस्थापित किया जाता है (डिफ़ॉल्ट रूप से नहीं हो सकता है) किसी भी छूटी हुई cron.dailyनौकरी को अगली बार मशीन के बूट (साथ ही मशीन को चालू होने पर आधी रात को चलाने पर ) पकड़ा जाएगा।

स्क्रिप्ट के लिए आप बस करेंगे:

#!/bin/sh
rsync -a user@serverB:/source/folder/ /destination_folder

-zयदि बैकअप धीमा (ish) कनेक्शन से अधिक है या यदि आप बैंडविड्थ बचाना चाहते हैं, तो आप (कम्प्रेशन) विकल्प जोड़ सकते हैं , लेकिन मेरे अनुभव में यह वास्तव में आधुनिक मशीनों / नेटवर्कों के साथ प्रदर्शन को प्रभावित करेगा।

यदि आप प्रत्येक बैकअप का लॉग रखना चाहते हैं, तो आप कुछ ऐसा कर सकते हैं:

#!/bin/sh
rsync -av user@serverB:/source/folder/ /destination_folder \
  >/var/log/backup_log 2>&1

एक क्रॉन जॉब के रूप में काम करने के लिए इस के लिए ध्यान दें, आप होना आवश्यक है passwordless ssh के लिए स्थापित जड़ सेरवेरा पर ServerB में प्रवेश करने की। नौकरियों के मूल होने के बाद से यह रूट अकाउंट (यानी चाबियां /root/.ssh) होना चाहिए cron.daily


जरूरी नहीं कि आप सार्वजनिक कुंजी और प्रति उपयोगकर्ता क्रोनोजर का उपयोग करें।
ब्रायम

@Braiam, anacronप्रति उपयोगकर्ता cronनौकरियों को नहीं उठाएगा । यद्यपि आप हमेशा इस्तेमाल कर सकते हैं su/ sudoस्क्रिप्ट से एक विशेष उपयोगकर्ता के रूप में rsync को चलाने के लिए। लेकिन ध्यान दें कि चाबियाँ अधिक सुरक्षित रूप से नीचे रखी जाएंगी /root
ग्रीम

1
यदि आप रूट के साथ क्रोन जॉब और ssh का उपयोग करना चाहते हैं, तो यह प्रतिबंधित करने के लिए बहुत अधिक सुरक्षित है कि रूट अधिकृत प्राधिकारी_की फ़ाइल में दूसरी मशीन में क्या कर सकता है।
गाइडो

1
@guido, सर्वरबी पर रूट के रूप में लॉग इन करने की कोई आवश्यकता नहीं है क्योंकि आप सर्वरए पर रूट हैं। @ जेनीडी ने पहले से ही यहां क्या करना है, इसके बारे में सुझाव दिया है, लेकिन आप जो कुछ भी कर रहे हैं उसकेuser आधार पर मशीनबी पर एक सामान्य उपयोगकर्ता हो सकता है ।
ग्रीम

1
सबसे अधिक संभावना है कि आपके उपयोगकर्ता की फ़ाइलों की पहुंच बीआरबी तक नहीं है। यदि यह स्थिति है तो या तो आपको उस उपयोगकर्ता का उपयोग करने की आवश्यकता है जो वर्तमान उपयोगकर्ता को सही समूहों में जोड़कर या फ़ाइलों पर अनुमतियों को बदलकर सही अनुमतियाँ देता है। यदि आप अपने द्वारा की जा रही त्रुटियों का एक नमूना और ls -lकुछ फ़ाइलों के आउटपुट को अपने प्रश्न में जोड़ते हैं , तो लोग आगे की सलाह दे सकते हैं।
ग्रीम

5

मैं rdiff- बैकअप का उपयोग करने का सुझाव दूंगा । मैं अब इसका उपयोग अपने स्वयं के डेटा की हर रात (दो वर्कस्टेशन, दो सर्वर और किसी और के सर्वर पर एक खाता) के लिए स्वचालित वृद्धिशील बैकअप बनाने के लिए करता हूं।

मैंने इसके लिए पहले rsync का उपयोग किया, लेकिन rdiff-backup पर स्विच कर दिया क्योंकि यह अधिक सुविधाजनक है, और यह वर्चुअल मशीन डिस्क छवियों जैसे बड़ी फ़ाइलों के वृद्धिशील बैकअप बना सकता है। rdiff- बैकअप मेरे पिछले rsync बैकअप स्क्रैप की तरह है, लेकिन सही किया गया है

मैंने मशीन पर /etc/cron.daily में एक स्क्रिप्ट फ़ाइल डाल दी है, जहां बैकअप संग्रहीत है, जो रोजाना सुबह-सुबह एक बार आरडीएफ-बैकअप शुरू करता है, और रिमोट मशीन से डेटा प्राप्त करता है।


4

पिछले सभी उत्तरों के अलावा, यहां एक है जो उस कुंजी के साथ लॉग इन करने पर क्या किया जा सकता है, इस पर प्रतिबंध के साथ SSH कुंजी पर निर्भर करता है।

सर्वर A पर

यदि आप एक अलग उपयोगकर्ता बनाते हैं या अपने मौजूदा उपयोगकर्ता नाम में से एक का उपयोग करते हैं, तो इस पर यह कम महत्वपूर्ण है, हालांकि अगर यह मैं होता तो मैं एक अलग उपयोगकर्ता बनाता। मैं नीचे bkpuserदिए गए अपने उदाहरणों में दोनों सर्वरों के लिए उपयोगकर्ता नाम का उपयोग करूंगा।

लॉग इन करते समय bkpuser, बिना पासवर्ड के SSH कुंजी बनाएं।

सर्वर B पर

सक्षम PubkeyAuthenticationमें sshd_config

उपयोगकर्ता बनाएँ bkpuser। एक बहुत ही जटिल पासवर्ड सेट करें, या उस उपयोगकर्ता के लिए पासवर्ड लॉगिन को अक्षम करें (वास्तव में आप ऐसा कैसे करते हैं, यह इस बात पर निर्भर करेगा कि आप किस यूनिक्स और डिस्ट्रो पर चल रहे हैं)। मुद्दा यह है कि उपयोगकर्ता को केवल SSH कुंजी के साथ लॉग इन करना चाहिए। सुनिश्चित करें कि bkpuserसभी निर्देशिकाओं तक पहुँच और फ़ाइल को आप बैकअप लेना चाहते हैं।

ए से ~bkpuser/.ssh/authorized_keysबी पर बनाई गई कुंजी के सार्वजनिक भाग को कॉपी करें। कनेक्शन पर स्वचालित रूप से कमांड चलाने के लिए संपादित करें। उस कमांड को शेल स्क्रिप्ट का पॉइंटर नहीं होना चाहिए; इसके बजाय सीधे कुंजी में शेल स्क्रिप्ट डालें। एक सीमा भी शामिल करें ताकि कुंजी केवल सर्वर ए और किसी अन्य सर्वर से उपयोग की जा सके। नीचे दिए गए उदाहरण में, मैं सर्वर को आईपी पता दे रहा हूं 10.1.2.3और मैं यह मान रहा हूं कि मैं जिन फाइलों का बैकअप लेना चाहता हूं, वे सभी के तहत हैं /data

from="10.1.2.3",no-port-forwarding,no-X11-forwarding,no-agent-forwarding,no-pty,command="cd /data;/usr/bin/tar -cf - *; /usr/bin/logger -t BACKUP -p daemon.info \"INFO: Backup-files on $HOST fetched from ${SSH_CLIENT%% *} by $USER\";" ssh-dss AA.....

सर्वर A पर

यदि आप @rebootप्रविष्टियों में से एक क्रोन टैब का उपयोग कर रहे हैं , bkpuserतो कमांड के साथ srontab में ऐसी प्रविष्टि जोड़ें ssh -i ~bkpuser/.ssh/id_dsa serverB > backup.tar.gz। यदि यह उन लोगों की अनुमति नहीं देता है, तो इसे किसी भी समय सेट करें जैसे आप - यदि यह मेरा डेटा था, तो मैं शायद इसे दैनिक करूँगा।


2

यहाँ SSH का उपयोग करते हुए 4 A पर हर दिन सर्वर B को सर्वर A के बैकअप के लिए एक पूर्ण समाधान है।

सर्वर B से सर्वर A तक एक स्वचालित SSH संयोजन बनाएं

ssh-keygen -t dsa -b 1024
ssh-copy-id -i ~/.ssh/id_dsa.pub "-p ssh_port root@server_a"

सर्वर B पर बैकअप स्क्रिप्ट बनाएँ

नैनो / रूट / बैकअप

# !/bin/sh

# Variables loading
HOST="root@server_a"
PORT=22
DIR="/var/backups/server_b"

# Directories creating
ssh -p $PORT $HOST <<EOF
    mkdir -p $DIR/home
    logout
EOF

# Files backing up
rsync -aze "ssh -p $PORT" --delete /home/user $HOST:$DIR/home

chmod 744 / रूट / बैकअप

सर्वर बी पर स्वचालित बैकअप

Crontab -e

0 4 * * * /root/backup > /dev/null

अधिक जानकारी के लिए पृष्ठ देखें लिनक्स पर एक पासवर्ड दर्ज किए बिना SSH से कनेक्ट करें और डेबियन या उबंटू लिनक्स पर एक सर्वर का बैकअप लें


1

आप इसके लिए rsync का उपयोग कर सकते हैं (थोड़े रिवर्स तरीके से):

serverA# rsync -avz user@serverB:/path-to-backup.tar.gz /var/backup

कहाँ पे:

-avz  archive, compress and be verbose

मुझे पूरा यकीन -aहै कि इसका तात्पर्य है -r
Shadur

आप पूरी तरह से सही हो
गुइडो

-1

मामले की जड़ यह है कि इसे स्वचालित रूप से कैसे किया जाए (पासवर्ड की आवश्यकता नहीं है):

  • एक शुरू screenया tmuxसत्र
  • निष्पादित eval $(ssh-agent)
  • के साथ अपनी कुंजी जोड़ें ssh-add
  • rsync के लिए झंडे export RSYNC_RSH="ssh -i ~/.ssh/id_rsa ..."
  • हर 24 घंटों के साथ बैकअप while :; do rsync -av u@h:/p /local; sleep $[24*60*60]; done

पासवर्ड-कम के लिए +1 ssh
ग्रीम

तो मैं इन सभी को एक स्टार्ट अप स्क्रिप्ट में डालूंगा, है ना?
19

1
मुझे लगता है कि यहां "वास्तव में महत्वपूर्ण सवाल" शुरू होता है कि सुरक्षा की कितनी आवश्यकता है? यह पासवर्ड के साथ या बिना? यह केवल तभी काम करेगा जब आप 1) इसे B से करते हैं, निलंबित करें या हाइबरनेट करें A. यदि आप A बंद करते हैं तो यह काम नहीं करेगा। यदि आप पासवर्ड के बिना करते हैं तो आप एक तरह की "जोखिम भरी स्थिति" बन जाएंगे।

RSYNC_SSHSSH कुंजियों के मानक स्थानों को खोजने के लिए जोड़ने की आवश्यकता नहीं है ।
पावेल Paमेरदा

1
मुझे पता है। आप उन ...बिंदुओं का भी निरीक्षण करते हैं जहाँ आप उपयोगी तर्क जोड़ सकते हैं। आपने मेरी पिछली टिप्पणी भी नहीं पढ़ी है जहाँ मैं "वास्तव में महत्वपूर्ण प्रश्न" का उल्लेख करता हूं, इस प्रकार मैंने कभी भी पासवर्ड रहित कुंजी के साथ ऐसा नहीं किया। आपको सक्षम करने की भी आवश्यकता होगी PubkeyAuthenticationऔर किसी ने कहा नहीं।
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.