मुखपृष्ठ » कैसे » एक दूरस्थ सर्वर पर एक ही उपनिर्देशिका में एक फ़ाइल अपलोड करने के लिए शेल स्क्रिप्ट

    एक दूरस्थ सर्वर पर एक ही उपनिर्देशिका में एक फ़ाइल अपलोड करने के लिए शेल स्क्रिप्ट

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

    इसलिए, मैंने इसे सुरक्षित फ़ाइल कॉपी करने के लिए scp का उपयोग करते हुए, इसे अपने लिए स्वचालित करने के लिए एक शेल स्क्रिप्ट लिखने के लिए खुद पर लिया है। (महत्वपूर्ण साइड नोट: ftp बुरी तरह असुरक्षित है, इसके बजाय WinSCP का उपयोग करें)

    हल करने के लिए मुख्य समस्या यह थी कि मेरे वर्डप्रेस मेरी डेवलपमेंट मशीन पर स्थापित मेरे सर्वर पर इंस्टॉलेशन की तुलना में एक अलग आधार निर्देशिका है। मेरी विकास मशीन पर यह / var / www है, और मेरे सर्वर पर कुछ और है जैसे / var / www / howtogeek / docs /। मैंने स्क्रिप्ट की शुरुआत में उन्हें केवल चर में बदलने का फैसला किया, जैसे:

    [email protected]
    RDIR = / var / www / howtogeek / डॉक्स
    LDIR = "\ / var \ / www"

    ध्यान दें कि स्क्रिप्ट में स्थानीय निर्देशिका (LDIR) पथ में प्रत्येक / से पहले एक है। ऐसा इसलिए है क्योंकि हम इसे स्क्रिप्ट में बाद में एक sed कमांड में पास करने जा रहे हैं, इसलिए हमें उन मूल्यों से बचना होगा। मुझे यकीन है कि इसके आसपास कोई और रास्ता है, लेकिन मैं इससे अनजान हूं.

    अगला, मैंने स्वचालित ssh logins की स्थापना की। ऐसा करने के लिए, आपको पहले ssh कीजेन उपयोगिता को चलाने की आवश्यकता है जैसे:

    ssh-keygen -t rsa

    फिर आपको दूरस्थ सर्वर पर ~ / .sh / id_rsa.pub फ़ाइल ~ / .ssh / अधिकृत_की फ़ाइल को कॉपी करने की आवश्यकता है। यदि दूरस्थ सर्वर पर पहले से ही ~ /। Ssh डायरेक्टरी बनाई गई है (आप जांचना चाहते हैं), तो आप इस कमांड को कुंजी को कॉपी करने के लिए चला सकते हैं:

    बिल्ली ~ /। ssh / id_rsa.pub | ssh उपयोगकर्ता @ hostname 'cat >> .sh / अधिकृत_कीप्स'

    अब हमें स्वचालित ssh लॉगिन मिल गया है, जो पासवर्ड के बिना scp यूटिलिटी का उपयोग करने में सक्षम होगा। अब हम स्क्रिप्ट में उपयोग किए जाने वाले scp कमांड पर एक नज़र डालेंगे:

    scp $ 1 $ SSHSERVER: $ RDIR'pwd | sed "s / $ LDIR //" / 'echo $ 1 | sed' s /.*\/// "

    $ 1 वह पैरामीटर है जिसे आप उस फ़ाइल नाम के लिए स्क्रिप्ट में पास करेंगे जिसे आप अपलोड करने का प्रयास कर रहे हैं। $ SSHSERVER और $ RDIR वैरिएबल हैं जो हम उपयोगकर्ता @ होस्टनाम और पूर्ववर्ती दूरस्थ पथ सेट करने के लिए स्क्रिप्ट की शुरुआत में सेट करेंगे।.

    पहला ब्लॉक जो pwd से शुरू होता है। sed वर्तमान निर्देशिका पथ को ले जाता है और पथ के पूर्ववर्ती भाग से दूर हो जाता है जो दूरस्थ सर्वर से मेल नहीं खाता है, लेकिन शेष पथ को छोड़ देता है। उदाहरण के लिए, यदि आप / var / www / wp-content / में थे, जब आप कमांड चलाते थे, तो sed ब्लॉक हमारे LDIR वैरिएबल के आधार पर / var / www से अलग हो जाएगा, लेकिन / wp-content / का हिस्सा छोड़ दें.

    दूसरा ब्लॉक सिर्फ स्क्रिप्ट के लिए दिए गए फ़ाइलनाम से पूरे पूर्ववर्ती रास्ते को बंद करना सुनिश्चित करता है ताकि आपको केवल फ़ाइल नाम मिल जाए.

    उदाहरण के लिए, यदि आपने स्क्रिप्ट का नाम up.sh रखा है और इसे अपने स्थानीय / var / www / wp-content / plugins / directory से फाइल पर चलाया है:

    up.sh myplugin.php

    इसका विस्तार शेल द्वारा निम्नलिखित के रूप में किया गया है:

    scp myplugin.php [email protected]: /var/www/howtogeek/docs/wp-content/plugins/myplugin.php

    लेख के आधार पर अपनी खुद की स्क्रिप्ट फ़ाइल बनाने की कोशिश करने के बजाय, मैंने आपको इसे डाउनलोड करने के लिए प्रदान किया है। इस तरह से काम नहीं करने वाले विशेष पात्रों के साथ कोई समस्या नहीं होगी ... और हां, मैंने स्क्रिप्ट को स्वयं अपलोड करने के लिए उपयोग किया =)

    Geek-uploader.sh डाउनलोड करें

    बस इसे अपने रास्ते में कहीं रख दें, और इसे आप जो चाहें नाम दें। मैंने अपना नाम बदलकर सिर्फ "अप" कर लिया है, इसलिए मैं अपलोड करने के लिए "अप फाइलनाम" टाइप कर सकता हूं। अपने वातावरण से मेल खाने के लिए स्क्रिप्ट की शुरुआत में इसे खोलना और चरों को बदलना भी याद रखें.

    यह लिपि * निक्स शेल और एससीपी उपयोगिता के साथ किसी भी चीज पर काम करना चाहिए। मैं उबंटू का उपयोग कर रहा हूं, लेकिन यह सोलारिस, ओएस एक्स या यहां तक ​​कि विंडोज के साथ सिग्विन स्थापित पर काम करना चाहिए.