मैं किसी bash स्क्रिप्ट को कैसे निष्पादित कर सकता हूं जिसमें रूट विशेषाधिकारों की आवश्यकता होती है?


15

मेरी आईएसपी से यह स्क्रिप्ट लाइनें हैं:

sudo bash
echo "plugin L2TP.ppp">>/etc/ppp/options 
echo "l2tpnoipsec">>/etc/ppp/options

यह काम करता है अगर मैं टर्मिनल में लाइन से लाइन पेस्ट करता हूं। मैं एक .command फ़ाइल बनाना चाहता हूँ और इसे डबल-क्लिक करके चलाना चाहता हूँ। लेकिन मेरे पास सभी पासवर्ड प्रॉम्प्टिंग और फिर खाली बैश विंडो है। परिणामस्वरूप "विकल्प" फ़ाइल खाली है।

मैंने यह कोशिश की:

#!/bin/bash

echo "plugin L2TP.ppp">>/etc/ppp/options 
echo "l2tpnoipsec">>/etc/ppp/options

मुझे मिला:

/ etc / ppp / विकल्प: अनुमति से इनकार किया

मुझे लगता है कि मुझे बैश के अंदर से रूट विशेषाधिकार प्राप्त करने के लिए कुछ कमांड का उपयोग करने की आवश्यकता है।


जब आपने अपनी स्क्रिप्ट बनाई थी तो क्या आपने sudo ./ispscript.command लिखकर इसे निष्पादित किया था? इसके अलावा, बैश स्क्रिप्ट में आमतौर पर एक .sh प्रत्यय होता है: ipscript.sh।
आरोन झील

1
FYI करें इस स्क्रिप्ट को केवल एक बार चलाने की आवश्यकता है। इसके अलावा, यदि आप स्क्रिप्ट को चालू रखना चाहते हैं, तो यह फाइल के लिए APPENDING >> है। विकल्प फ़ाइल आपके द्वारा चलाए जा रहे आकार (स्क्रिप्ट) को जारी रखने वाली है। यह विकल्प फ़ाइल को पढ़ने के साथ समस्याओं का कारण हो सकता है या नहीं भी हो सकता है।
dhempler

@ dennis.hempler, धन्यवाद मुझे यह पता है। दरअसल मैं इस स्क्रिप्ट को अक्सर चलाऊंगा। क्योंकि USB- मॉडेम डिवाइस को ठीक से संचालित करने के लिए इस फाइल को खाली होना चाहिए। इसलिए यूएसबी-मॉडेम डालने से पहले मैंने फ़ाइल को मिटा दिया और वायर्ड इंटरनेट से कनेक्ट करने से पहले मैंने फ़ाइल में उन विकल्पों को लिखा।
दिमित्री

जवाबों:


16

आपके द्वारा बनाई गई स्क्रिप्ट लें:

#!/bin/bash

echo "plugin L2TP.ppp">>/etc/ppp/options 
echo "l2tpnoipsec">>/etc/ppp/options

इसे अपने घर निर्देशिका में, या अपने घर निर्देशिका के अंदर एक 'स्क्रिप्ट' निर्देशिका, l2tp.sh के रूप में सहेजें। इसे निष्पादित करने की अनुमति दें (टर्मिनल में इस कमांड को लिखें):

chmod 700 ~/path/to/l2tp.sh

फ़ाइल को निष्पादित करने के लिए sudo (रूट विशेषाधिकार) का उपयोग कर:

विधि # 1। टर्मिनल प्रकार में:

$ sudo ~/path/to/l2tp.sh

विधि # 2। इस सामग्री के साथ एक फ़ाइल run_l2tp.command बनाएँ:

sudo ~/path/to/l2tp.sh

इसे निष्पादित करने की अनुमति दें:

chmod u+x run_l2tp.command

जब आप run_l2tp.command को डबल-क्लिक करेंगे और पासवर्ड दर्ज करेंगे l2tp.sh फ़ाइल रूट विशेषाधिकारों के साथ निष्पादित की जाएगी।

कुछ नोट:

  • सिस्टम की तरह UNIX पर, ~ "माय होम डाइरेक्टरी" के लिए संक्षिप्त है।
  • Chmod 700 आपके द्वारा केवल फ़ाइल को निष्पादन योग्य बना देगा। अधिक जानकारी के लिए: यह विकिपीडिया पृष्ठ देखें
  • कमांड से पहले 'sudo' टाइप करने से रूट विशेषाधिकारों का उपयोग करके प्रोग्राम निष्पादित किया जाएगा। ऐसा करते समय सावधान रहें, खराब चीजें हो सकती हैं यदि आप सुनिश्चित नहीं हैं कि आप क्या कर रहे हैं।
  • जाहिर है आप / पाथ / को छोड़ सकते हैं यदि आपने इस स्क्रिप्ट को सीधे अपने होम डायरेक्टरी में सेव किया है।

4

इसे बचाएं:

#!/bin/bash

echo "plugin L2TP.ppp">>/etc/ppp/options 
echo "l2tpnoipsec">>/etc/ppp/options

आपके डेस्कटॉप में जिसका नाम एक फाइल है script.sh

एक टर्मिनल विंडो खोलें और टाइप करें:

sudo bash ~/Desktop/script.sh

जब संकेत दिया जाए तो अपना पासवर्ड दर्ज करें और फ़ाइल के सभी कमांड सुपर उपयोगकर्ता निजीकृत के साथ चलेंगे।


4

यदि सुरक्षा उद्देश्यों के लिए, आप नहीं चाहते हैं कि आपके सिस्टम का कोई भी उपयोगकर्ता स्क्रिप्ट चलाने में सक्षम हो, लेकिन इसके बजाय आपको एक प्रशासनिक पासवर्ड के लिए संकेत दिया जाना चाहिए, एक वैकल्पिक समाधान शेल स्क्रिप्ट को बचाने और फिर प्रोग्राम का उपयोग करना होगा। AppleScript एडिटर एक AppleScript बनाने के लिए।

AppleScript एक-लाइनर होगा, कह रहा है do shell script «your script's name here» with administrator privileges। उस स्क्रिप्ट को एक एप्लिकेशन के रूप में सहेजें। फिर, जब आप इसे क्लिक करते हैं, तो यह आपसे एक व्यवस्थापक पासवर्ड मांगेगा, फिर शेल स्क्रिप्ट को व्यवस्थापक विशेषाधिकारों के साथ चलाएं।

जाहिर है, «your script's name here»अपनी स्क्रिप्ट के लिए पथ के साथ बदलें ।


2

समस्या यह है कि जब आप कमांड लाइन से करते हैं, शुरू करने के लिए क्या आप कर रहे हैं रहा है bashके तहत sudo, और उसके बाद करने के लिए उन है कि अगले दो आदेशों भेजने bash, नहीं मूल खोल। (संकेत है कि आप exitदो बार की जरूरत है )

जब आप इसे किसी स्क्रिप्ट में करते हैं, तो bashकमांड कभी भी बाहर नहीं निकलती है, इसलिए अगले दो कमांड कभी नहीं चलते हैं।

यह AppleScript समाधान की तरह सुरुचिपूर्ण नहीं है, लेकिन यदि आप इसे कमांड लाइन से स्क्रिप्ट के रूप में करने जा रहे हैं, तो समतुल्य होगा:

#!/bin/sh --
sudo bash -c 'echo "plugin L2TP.ppp">>/etc/ppp/options' 
sudo bash -c 'echo "l2tpnoipsec">>/etc/ppp/options'

अगर हमें io रीडायरेक्शन ( >>बिट) की जरूरत नहीं थी , तो हम sudoबिना sudo sh -cट्रिक की जरूरत के सीधे कमांड को कॉल कर सकते हैं । (और ध्यान दें कि मुझे sh -cगूंज को रूट के रूप में चलाने से रोकने के लिए तर्क को उद्धृत करना था , लेकिन मूल उपयोगकर्ता के रूप में संलग्न फ़ाइल।)

यह फाइंडर से एक फाइल के रूप में काम करेगा.command , लेकिन यह आपके पासवर्ड के लिए पूछते हुए एक टर्मिनल विंडो लाएगा, और यदि सही तरीके से दर्ज किया गया है, तो कमांड चलाएगा। (यह मानते हुए कि आपने हाल ही में इसके लिए प्रमाणीकरण नहीं किया है sudo... यदि आपके पास है, तो यह बिना किसी संकेत के चलेगा)

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