पासवर्ड निर्दिष्ट किए बिना सिस्टम के बीच रुपी रूट फाइल


2

यह मुझे बहुत मुश्किल लगता है।

मैंने अपने दो सिस्टम सेट किए हैं ताकि मैं कर सकूं rsync पासवर्ड निर्दिष्ट किए बिना, मेरे बीच उनकी फाइलें। अब समस्या यह है rsync फाइलें जो संबंधित हैं root। मेरे दोनों सिस्टम पर, रूट पासवर्ड नहीं हैं। जड़ बनने का एकमात्र तरीका है sudo। इसलिए मैं न तो पासवर्ड दे सकता हूं sudo rsyn local root@remote:, पास वाक्यांश की आपूर्ति के लिए मेरे ssh- एजेंट का उपयोग न करें। मैं किसी भी सिस्टम पर रूट पासवर्ड सेट नहीं करना चाहता; और मुझे दोनों प्रणालियों पर रूट के स्वामित्व वाली फ़ाइलों की आवश्यकता है।

संपादित करें : उन फ़ाइलों का उपयोग करना जो संबंधित हैं root केवल एक उदाहरण है, मुझे आसानी से पढ़ने / लिखने की प्रणाली (रूट के स्वामित्व वाली) फ़ाइलों को आसानी से पढ़ने के लिए मेरे अप्रकाशित खाते के लिए एक रास्ता चाहिए। एक उदाहरण मेरे कॉन्फ़िगर / रूट वातावरण को नए सिरे से स्थापित सिस्टम में कॉपी करना है। दो प्रणालियों वास्तव में एक ही मेजबान के तहत दो VMs हैं, इसलिए मेरे लिए उनके बीच रूट-स्वामित्व वाली फ़ाइलों की प्रतिलिपि बनाना कोई बड़ी चिंता नहीं है।

EDIT 2 : यदि मैं केवल अपने कॉन्फ़िगर / रूट वातावरण को नए सिरे से स्थापित प्रणाली में कॉपी करना चाहता हूं, तो मैं टार का उपयोग कर सकता हूं:

sudo tar cvzf - /root | ssh me@remote sudo tar xvzf - -C /

लेकिन मुझे जरूरत है rsync समय-समय पर अद्यतन करने के लिए। इसे बनाने का कोई आसान तरीका?

EDIT 3: औपचारिक रूप से प्रश्न तैयार करें

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

  1. root दोनों प्रणालियों पर खाता बंद है। यानी, नहीं हैं root पासवर्ड। जड़ बनने का एकमात्र तरीका है sudo (अनुशंसित सुरक्षा अभ्यास, देखें http://help.ubuntu.com/community/RootSudo )
  2. मैं पूरी तरह से पासवर्ड रहित नहीं चाहता sudo लेकिन हर समय पासवर्ड टाइप करना नहीं चाहते हैं।
  3. सामान्य अप्रभावित उपयोगकर्ता ने अपने ssh पास वाक्यांश को ssh एजेंट में दर्ज किया है।

धन्यवाद


तुंहारे tar कमांड काम नहीं करेगा, आपको रिमोट दर्ज करना होगा sudo पासवर्ड और sudo यदि आप उपयोग नहीं करते हैं तो शिकायत करेंगे -t के साथ झंडा ssh। इस स्थिति में, मुझे आपके पाइप से भी काम नहीं मिल सकता है -t
terdon

नहीं, यह ठीक काम करता है। मैंने इसे पोस्ट करने से पहले परीक्षण किया। ओह, मुझे sudo के लिए कोई भी पासवर्ड दर्ज करने की आवश्यकता नहीं है। (यह उबंटू है)
xpt

मुझे यकीन नहीं है कि यह काम करेगा, लेकिन 'पुराने दिनों' में आप का इस्तेमाल किया होगा hosts.equiv(5) और करो rsync के जरिए rsh(1), हालांकि माना जाता है कि आप के साथ संयोजन के रूप में एक समान दृष्टिकोण का उपयोग कर सकते हैं ssh के बजाय rsh
Aya

जवाबों:


2

समाधान।

  1. दूरस्थ रूट कार्यों के लिए उपयोगकर्ता की ssh कुंजी जोड़ना, लेकिन केवल आधा रास्ता, यानी, अब rsyn ... root@remote:... काम करता है। चुनौतीपूर्ण हिस्सा प्राप्त करना है sudo rsyn ... साथ ही काम करें।
  2. लेना sudo rsyn ... काम, क्या जरूरत है - sudo प्रमाणीकरण के लिए SSH एजेंट का उपयोग करना, http://www.evans.io/posts/ssh-agent-for-sudo-authentication/
  3. Ubuntu के तहत pam-ssh-Agent-dif PAM मॉड्यूल स्थापित करने के लिए, आप उस ppa का उपयोग कर सकते हैं जिसे मैंने अभी बनाया है, https://launchpad.net/~suntong001/+archive/ppa । Ubuntu 12.04 के तहत ठीक परीक्षण किया गया सटीक, और 13.10 सॉसी।

HTH


+1, अच्छी तरह से किया और इसे खोजने के लिए धन्यवाद। मुझे अभी भी लगता है कि आप अनावश्यक हुप्स के माध्यम से कूद रहे हैं और अपने रूट खाते को सक्रिय करना बेहतर होगा, लेकिन यह वास्तव में काम करता है।
terdon

@xpt आमतौर पर, "उपयोगी" के लिए एक उपयोगी जवाब = +1 कि जवाब के लिए :-)
Antoine Lizée

0

एक अन्य तरीका दोनों सर्वर पर एक .sh स्क्रिप्ट बनाना होगा, जिसमें आपकी rsync स्क्रिप्ट होगी।

फिर उन्हें क्रोनजोब या ssh के माध्यम से चलाएं:

ssh not-your-root-user@remoteserver sudo sh your-rsync-script.sh

या बस अपने rsync स्क्रिप्ट को सीधे ssh के माध्यम से चलाएं

ssh not-your-root-user@remoteserver sudo rsync local root@remote

अगर यह एक अनुसूचित rsync नौकरी है, तो मैं क्रोनजोब को प्राथमिकता दूंगा।


वह रिमोट को पासवर्ड कैसे देगा sudo आदेश? इसके अलावा, वह लॉग इन नहीं कर सकता root@remote, यही पूरी समस्या है।
terdon

और, अप्रकाशित खाते का उपयोग करने वाले इसके अलावा, रूट फ़ाइलों को पढ़ / लिख नहीं सकते, यही कारण है कि मैंने पूछा।
xpt

क्षमा करें मैं कल थका हुआ था जब उस सामान को लिखा। मूल खाते को सक्षम करने का सबसे अच्छा कारण यह होगा। :) सौभाग्य
Bolli

धन्यवाद @ बोल्ली। रूट खाता सक्षम करना मेरा अंतिम उपाय होगा। मैं जितना हो सके इससे बचने की कोशिश करूंगा। मैं और परीक्षण करूंगा और आपके पास वापस आऊंगा। मेरी योजना है, 1. हार्ड लिंक ssh config फाइल को सामान्य सामान्य उपयोगकर्ता से /root/.sh पर। या 2. मेरी ssh कुंजी को रूट करें। मेरा मानना ​​है कि एक सरल और आसान तरीका होगा ...
xpt

0

वैसे यह इस बात पर निर्भर करता है कि आप क्या करना चाहते हैं। क्या फ़ाइलों को दोनों प्रणालियों पर रूट के स्वामित्व की आवश्यकता है? वे नहीं करेंगे यदि आप बस एक बैकअप कर रहे हैं तो आप बस चला सकते हैं rsync रूट के रूप में, लेकिन अपने सामान्य उपयोगकर्ता के रूप में दूरस्थ सर्वर में प्रवेश करना।

स्थानीय के लिए एक कुंजी बनाएँ root दूरस्थ सामान्य उपयोगकर्ता के रूप में लॉग इन करने के लिए (मैं उपयोग करूंगा xpt आपके सामान्य उपयोगकर्ता का नाम):

sudo -i
ssh-keygen -t rsa
ssh-copy-id -i ~/.ssh/id_rsa.pub xpt@remote

अब आपको पासवर्ड-कम करने में सक्षम होना चाहिए ssh या rsync (रूट के रूप में) तो:

rsync /path/to/local xpt@remote

यदि फ़ाइलों को दोनों प्रणालियों पर रूट के स्वामित्व की आवश्यकता होती है, तो चीजें थोड़ी अधिक जटिल हो जाती हैं। ऐसा करने के लिए सबसे आसान काम दोनों सिस्टम पर एक रूट पासवर्ड सेट करना होगा:

sudo -i
passwd 

अब आप अपने दिल की सामग्री के लिए रूट के रूप में लॉग ऑन कर सकते हैं।

बेशक, श्रेष्ठ करने के लिए बात होगी नेटवर्क के रूप में फ़ाइलों को रूट के रूप में कॉपी न करें । मैं वास्तव में कल्पना नहीं कर सकता कि आप क्यों करना चाहते हैं और जोखिम वास्तव में प्रयास के लायक नहीं है, बस फाइलों को कॉपी करें और साथ खेलें sudo आवश्यकतानुसार एक बार उनकी नकल की गई।


अद्यतन करें:

मैं दोहराता हूं कि ऐसा करने का सबसे सरल तरीका प्रत्येक मशीन के लिए एक रूट पासवर्ड बनाना है और फिर रूट के रूप में कॉपी करना है। मुझे समझ में नहीं आता कि आप ऐसा क्यों नहीं चाहते, यह चलाना जितना आसान है sudo passwd

वैसे भी, यदि आप जोर देते हैं कि आप एक रूट पासवर्ड नहीं बनाना चाहते हैं, तो इसके चारों ओर एक ही रास्ता मुझे दिखाई दे सकता है:

  1. रन rsync एक उपयोगकर्ता योग्य निर्देशिका में कॉपी करने के लिए (मैं उपयोग करता हूं mktmp एक यादृच्छिक निर्देशिका नाम बनाने के लिए):

    dir=`mktemp -u`; && sudo rsync -avz /root xpt@remote:$dir
    
  2. करने के लिए सामग्री ले जाएँ remote:/root

    ssh -t lacoloc@badabing sudo rsync -avz "$dir"/* /root
    

    -t विकल्प ट्टी आवंटन को बाध्य करता है और चलाने के लिए आवश्यक है sudo रिमोट सिस्टम पर कमांड।

आप इसे अपने साथ जोड़कर दोनों को जोड़ सकते हैं ~/.bashrc फ़ाइल (मुझे बताएं कि क्या आप बैश का उपयोग नहीं करते हैं):

function Rrsync(){
    dir=`mktemp -u` &&
    sudo rsync -avz $1 $2:$dir &&
    ssh -t $2 sudo rsync -avz $dir/ $3 && rm -rf $dir
}

फिर आप इस तरह से फ़ंक्शन को कॉल कर सकते हैं:

Rrsync /root xpt@remote /root
------ ----- ---------- -----
   |     |       |        |---> The target directory on the remote server
   |     |       |------------> username@server 
   |     |--------------------> Path to local source directory
   |--------------------------> The function name

ध्यान रखें कि आपको एक अनुगामी स्लैश को जोड़ने / हटाने के साथ चारों ओर खेलना पड़ सकता है / rsync स्रोत और लक्ष्य के आधार पर कि क्या आप किसी निर्देशिका या निर्देशिका की सामग्री की प्रतिलिपि बना रहे हैं। देख man rsync

पासवर्ड के बिना यह काम करने के लिए, आपको दौड़ना होगा ssh-keygen तथा ssh-copy-id जैसा कि मैंने शुरू में ही बताया था। आपको अभी भी दो के लिए अपना पासवर्ड दर्ज करना होगा sudo एक बार, अपने स्थानीय मशीन के लिए और एक बार रिमोट के लिए।


धन्यवाद @terdon नहीं, मैं किसी भी सिस्टम पर रूट पासवर्ड सेट नहीं करना चाहता; और मुझे दोनों प्रणालियों पर रूट के स्वामित्व वाली फ़ाइलों की आवश्यकता है।
xpt

@ कृपया अपनी सटीक आवश्यकताओं के साथ अपने प्रश्न को अपडेट करें। आपको रूट के स्वामित्व वाली फ़ाइलों की आवश्यकता क्यों है? आप किस तरह की चीजों की नकल कर रहे हैं? अगर मुझे ठीक-ठीक पता था कि आप क्या करने की कोशिश कर रहे हैं, तो मैं वर्कअराउंड का पता लगा सकता हूं।
terdon

@xpt मैंने दूसरे समाधान के साथ अपना उत्तर अपडेट किया। गंभीरता से हालांकि, आप अपने जीवन को आसान बनाने और रूट पासवर्ड बनाने के लिए क्यों नहीं करते हैं? यह केवल एक ही आदेश है और जितना मैंने सुझाया है उससे बहुत सरल है।
terdon

यह अनुशंसित सुरक्षा अभ्यास है, help.ubuntu.com/community/RootSudo । डिफ़ॉल्ट रूप से, रूट खाता पासवर्ड उबंटू में बंद है। इसका मतलब है कि आप सीधे रूट के रूप में लॉगिन नहीं कर सकते हैं या रूट कमांड का उपयोग रूट उपयोगकर्ता बनने के लिए कर सकते हैं। हालाँकि, चूंकि रूट खाता भौतिक रूप से मौजूद है, इसलिए अभी भी रूट-स्तरीय विशेषाधिकारों के साथ, सूडो के साथ कार्यक्रम चलाना संभव है।
xpt

इसका एक कारण है: "हर पटाखा आपके बॉक्स में अपना रास्ता बनाने की कोशिश कर रहा है, उसे पता चल जाएगा कि उसका रूट नाम का एक खाता है और वह पहले प्रयास करेगा। वे नहीं जानते कि आपके अन्य उपयोगकर्ताओं के उपयोगकर्ता नाम क्या हैं। रूट खाता पासवर्ड बंद है, यह हमला अनिवार्य रूप से अर्थहीन हो जाता है, क्योंकि पहले स्थान पर दरार या अनुमान लगाने के लिए कोई पासवर्ड नहीं है। "
xpt

0

आप इसे सीधे रचनात्मक उपयोग के साथ rsync के साथ कर सकते हैं --rsync-path विकल्प। तो आप उपयोग करेंगे:

rsync -a -e "ssh" --rsync-path="sudo rsync" localdir/ username@remote.example.com:/remotedir

ध्यान दें कि इसके लिए आवश्यक है कि रिमोट होस्ट पर "sudo rsync" पासफ़्रेज़ के लिए नहीं पूछेगा। इसे कई तरीकों से पूरा किया जा सकता है:

  • करते हुए sudo -v rsync चलाने से पहले रिमोट पर (one-off rsync नौकरियों के लिए आदर्श)। अपने sudo का उपयोग नहीं करना चाहिए tty_tickets इसके लिए काम करने का विकल्प।
  • डाल username ALL= NOPASSWD:/usr/bin/rsync में /etc/sudoers दूरस्थ होस्ट पर।
  • का उपयोग करते हुए PAM-ssh-एजेंट लेखन के लिए रिमोट पर /etc/pam.d/sudo

बेशक, आप "डेमॉन मोड में rsync" का उपयोग "ssh पर rsync" के बजाय भी कर सकते हैं (देखें) rsyncd.conf(5) तथा /etc/default/rsync स्थानांतरण की बेहतर गति के अतिरिक्त लाभ के साथ, आप जो चाहते हैं, उसे पूरा करने के लिए डेबियन जीएनयू / लिनक्स पर)।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.