मैं एक स्थानीय ड्राइव पर लगातार बैकअप बनाता हूं जिसे मैं एक दूरस्थ सर्वर पर दैनिक सिंक करना चाहता हूं।
लक्ष्य सर्वर केवल SSH कुंजी (कोई पासवर्ड नहीं) एक्सेस के लिए कॉन्फ़िगर किया गया है। चूँकि उस सर्वर के लिए मेरी प्राथमिक SSH कुंजी पासफ़्रेज़-रक्षित है, इसलिए मैंने एक दूसरी SSH कुंजी (पासफ़्रेज़ रक्षित नहीं) + उपयोगकर्ता बनाया है जिसका उपयोग अनअटेंडेड बैकअप के लिए किया जाता है - इस तरह से मुझे अपना पासफ़्रेज़ दर्ज करने के लिए उपस्थित होने की आवश्यकता नहीं है जब क्रोन चलता है ।
मैं क्रोन और rsync का उपयोग कर रहा हूं, और सभी कमांड व्यक्तिगत रूप से काम करते हैं, लेकिन संयुक्त होने पर विफल होते हैं।
समस्या निवारण के दौरान मुझे जो फुर्सत मिली है, वह चल रही है
env -i sh -c "rsync -lrstRO --delete --exclude 'lost+found' /Backups/auto-daily-backups/./ backups-only@XX.XX.XX.XX:/backups/desktop/"
जो त्रुटि देता है
Permission denied (publickey).
rsync: connection unexpectedly closed (0 bytes received so far) [sender]
rsync error: unexplained error (code 255) at io.c(226) [sender=3.1.0]
कैसे आगे का निवारण करने के लिए कोई सुझाव?
यहाँ मैंने जो अभी तक कोशिश की है और मैं विचारों से बाहर हूँ:
- क्रोन निश्चित रूप से चल रहा है
ps aux | grep cron
कुछ भी असामान्य नहीं है / var / log / syslog
Sep 7 13:22:01 desktop CRON[6735]: (tom) CMD (sh /home/tom/Documents/Scripts/offsite-backup)
टर्मिनल में SSH रिमोट सर्वर के रूप में बैकअप उपयोगकर्ता काम करता है
ssh backups-user@XX.XX.XX.XX
- टर्मिनल में कमांड चलाना पूरी तरह से काम करता है
rsync -lrstRO --delete --exclude 'lost+found' /Backups/auto-daily-backups/./ backups-only@XX.XX.XX.XX:/backups/desktop/
मैन्युअल रूप से बैकअप-उपयोगकर्ता कुंजी के लिए पथ निर्दिष्ट करने का कोई प्रभाव नहीं है
rsync -lrstRO --delete --exclude 'lost+found' -e 'ssh -i /home/tom/.ssh/backups-only' /Backups/auto-daily-backups/./ backups-only@XX.XX.XX.XX:/backups/desktop/
नॉन-फंक्शनिंग कमांड को साधारण टेस्ट कमांड के साथ बदलना
echo "Hello world" > ~/Desktop/test.txt
कंप्यूटर पर चिल्लाना / शपथ ग्रहण का कोई प्रभाव नहीं पड़ा (लेकिन मुझे अस्थायी रूप से बेहतर महसूस हुआ)।
1 संपादित करें:
यहाँ मेरी crontab फ़ाइल और इसे कॉल की गई स्क्रिप्ट है।
...
# m h dom mon dow command
MAILTO=""
* * * * * sh /home/tom/Documents/Scripts/offsite-backup
तथा
#!/bin/bash
rsync -lrstRO --delete --exclude 'lost+found' /Backups/auto-daily-backups/./ backups-only@XX.XX.XX.XX:/backups/desktop/
2 संपादित करें:
बस स्पष्ट करने के लिए, /var/log/auth.log
लक्ष्य सर्वर पर लाइन शामिल है Sep 11 08:23:01 <hostname> CRON[24421]: pam_unix(cron:session): session closed for user root
यह भ्रामक है क्योंकि मैं अब हर मिनट स्थानीय रूप से क्रोन नहीं चला रहा हूं, लेकिन सर्वर लॉग में एक नई प्रविष्टि अभी भी हर मिनट दिखाई देती है। सर्वर पर सभी उपयोगकर्ताओं (रूट सहित) के लिए Crontab फाइलें खाली हैं और कुछ भी नहीं करते हैं।
इसके अलावा, उपयोगकर्ता 'बैकअप-ओनली' केवल सर्वर पर और सीमित अधिकारों के साथ, समर्पित डेस्कटॉप SSH कुंजी के साथ मेरी डेस्कटॉप मशीन पर बनाया गया था। मैं मान रहा हूं कि यह रास्ता है क्योंकि कमांड को मैन्युअल रूप से चलाने पर सब कुछ काम करता है।
ऊपर पोस्ट की गई कॉन्टैब फाइल मेरे लिए है, मेरे डेस्कटॉप मशीन पर उपयोगकर्ता 'टॉम'। मेरा इरादा यह है कि यह उस स्क्रिप्ट को कॉल करे जो सर्वर पर उपयोगकर्ता 'बैकअप-ओनली' के रूप में लॉग इन करे। मैंने बस बैकअप स्क्रिप्ट चलाने की कोशिश की (बजाय इसके अंदर कमांड के) और यह सफलतापूर्वक जुड़ा और काम किया। मैंने इसे अपने डेस्कटॉप पर उपयोगकर्ता 'टॉम' के रूप में चलाया, उसी उपयोगकर्ता ने जो क्रॉन जॉब बनाया था जो काम नहीं करेगा। यहाँ उस सफल लॉगिन के साथ इसी सर्वर लॉग से आउटपुट है
Sep 11 08:35:31 <hostname> sshd[25071]: error: Could not load host key: /etc/ssh/ssh_host_ed25519_key
Sep 11 08:35:32 <hostname> sshd[25071]: Accepted publickey for backups-only from <desktop IP> port 54242 ssh2: RSA e2:e6:07:27:c1:continues...
Sep 11 08:35:32 <hostname> sshd[25071]: pam_unix(sshd:session): session opened for user backups-only by (uid=0)
Sep 11 08:35:32 <hostname> systemd-logind[638]: New session 12 of user backups-only.
Sep 11 08:36:00 <hostname> sshd[25133]: Received disconnect from <desktop IP>: 11: disconnected by user
Sep 11 08:36:00 <hostname> sshd[25071]: pam_unix(sshd:session): session closed for user backups-only
Sep 7 14:45:01 <hostname> CRON[18716]: pam_unix(cron:session): session closed for user root
Sep 7 16:06:02 <hostname> sshd[6747]...
। क्या आप 100% सकारात्मक हैं कि यह लॉगलाइन सर्वर से है और यह सही लाइन है? आपके द्वारा पोस्ट किया गया क्रेस्टब केवल बैकअप का क्रॉस्टैब है ? इसके अलावा, पहचान फ़ाइल को मैन्युअल रूप से जोड़ने का प्रयास करें:rsync .... -e 'ssh -i /home/user/.ssh/identity' ...
auth.log
आपके द्वारा Edit 2 के तहत पोस्ट की गई लाइन सर्वर पर चलने वाले क्रोन के लिए है, और आपके लॉगिन प्रयासों से कोई लेना-देना नहीं होना चाहिए। क्या आप tail -f /var/log/auth.log
क्रोन के माध्यम से स्क्रिप्ट को चलाने की कोशिश करते समय सर्वर पर कोशिश कर सकते हैं ? इसके अलावा, मुझे यकीन नहीं है कि यह काम करेगा, लेकिन क्या आप अपनी पहली env
कमांड को rsync .... -e 'ssh -vvv -i /home/user/.ssh/identity ...
यह देखने के लिए आज़मा सकते हैं कि क्या यह अधिक त्रुटि करता है?