एक स्क्रिप्ट भूल जाओ और इसे चलाएं


28

मैं एक स्क्रिप्ट डाउनलोड करना चाहता हूं: http://dl.dropbox.com/u/11210438/flockonus-stack.sh और इसे निष्पादित करें। मेरा अनुमान है, इसका नाम बदलने के लिए wget का उपयोग करना, उसे chmod करना और निष्पादित करना।

उबंटू पर ऐसा करने के लिए क्या आदेश हैं?

जवाबों:


51

सावधान

स्क्रिप्ट चलाने से पहले, क्या आप उस व्यक्ति पर भरोसा करते हैं जिसने इसे लिखा है?

उदाहरण के लिए, क्या आपको उम्मीद है कि स्क्रिप्ट में यह शामिल होगा?

echo "brain1" > /etc/hostname

वह आपके होस्टनाम को बदलने का प्रयास करेगा।


भविष्य के संदर्भ के लिए, यदि, स्क्रिप्ट के सत्यापन के बाद सही है और दुर्भावनापूर्ण नहीं है, तो आप इसे इस तरह एक पंक्ति में चला सकते हैं:

wget -O - http://dl.dropbox.com/u/11210438/flockonus-stack.sh | bash

लेकिन इसे अलग से डाउनलोड करें और इसे पहली बार चलाने से पहले पढ़ें।

यह भी ध्यान दें कि डाउनलोड की गई स्क्रिप्ट के अंदर इंटरैक्टिव संकेत इस पद्धति का उपयोग करके ठीक से काम नहीं कर सकते हैं।


9
इसके साथ महत्वपूर्ण (महत्वपूर्ण) सुरक्षा चिंताओं को इंगित करने के लिए +1। निश्चित रूप से आप स्रोत पर भरोसा करते हैं। जो echo "brain1" > /etc/hostnameआसानी से हो सकता है rm -rf /
क्रिस्टोफर कैशेल

2
+1 धन्यवाद दोस्तों, वह स्क्रिप्ट मेरे पास से है, यह सुरक्षित है .. एक लाइनर से प्यार है, लेकिन, इसमें कुछ इंटरेक्टिव लाइनें हैं जो नहीं चलीं .. डननो क्यों?
फैबियानो सोरिएनी

1
आपकी apt-get installपंक्तियाँ? यदि apt-getकोई अतिरिक्त निर्भरता स्थापित करेगा, तो यह आपसे पूछेगा, और यदि यह नहीं हो सकता है तो यह सुरक्षित होने के लिए बाहर निकल जाएगा। या तो सभी आश्रित पैकेजों को कमांड लाइन के तर्कों में जोड़ें, या जोड़ने पर विचार करें -y, जैसेapt-get -y install...
मिकेल

मुद्दा निर्भरता से संबंधित नहीं है, यह उपयुक्त फ्लशिंग स्टड के साथ करना है।
Zoredache

1
आप वास्तव में स्रोत पर भरोसा नहीं कर सकते, भले ही आप बीच के हमलों में आदमी के कारण "स्रोत पर भरोसा करें"। कहा कि, बैश स्क्रिप्ट के साथ यादृच्छिक निजी यूआरएल एक संकीर्ण पर्याप्त हमला वेक्टर होना चाहिए जो इसे खींचने की क्षमता के साथ कोई भी ऐसा करने के लिए पर्याप्त नहीं है।
SpamapS

9

गैर-इंटरेक्टिव लिपियों

wget -O - http://website.com/my-script.sh | bash

ध्यान दें कि इस पद्धति का उपयोग करते समय, इंटरैक्टिव स्क्रिप्ट काम नहीं करेगी।


इंटरैक्टिव लिपियों

इंटरैक्टिव स्क्रिप्ट को काम करने के लिए, आप इसका उपयोग कर सकते हैं:

bash <(wget -qO- http://website.com/my-script.sh)

इंटरएक्टिव लिपियों को रूट के रूप में चलाने की आवश्यकता है

चेतावनी: यह बेहद खतरनाक है। सिफारिश नहीं की गई।

sudo su -c "bash <(wget -qO- http://website.com/my-script.sh)" root

ध्यान दें कि आप साधारण उपयोग नहीं कर सकते sudo bashक्योंकि उपयोग करने से <(...)वर्चुअल फ़ाइल बन जाएगी और यह फ़ाइल डिस्क्रिप्टर जड़ों से टकराकर पहुंच से बाहर नहीं होगा। इसे उसी उपयोगकर्ता पर निष्पादित किया जाना चाहिए जिसे वर्चुअल फ़ाइल पढ़ने की आवश्यकता है, इसलिए इसे भेजा जाना चाहिए क्योंकि यह रूट उपयोगकर्ता शेल के अंदर स्वयं का कमांड है।


1
यह सबसे अच्छा जवाब है। यह इंटरएक्टिव बनाम गैर-इंटरैक्टिव बनाम विशेषाधिकार प्राप्त निष्पादन के महत्वपूर्ण पहलुओं को शामिल करता है।
लियोनिद मकरोव

5

वह स्क्रिप्ट मुझ से है, यह सुरक्षित है .. एक लाइनर से प्यार है, लेकिन, इसकी कुछ इंटरैक्टिव लाइनें हैं जो नहीं चलीं .. पता नहीं क्यों?

जब dpkg चलता है, जिसे apt-get कहते हैं, तो यह स्टड फ्लश करता है। यदि आप जैसे कमांड का उपयोग कर रहे हैं curl blah | bash, तो आप मूल रूप से पेज की सामग्री को STDIN के माध्यम से बैश करने के लिए भेज रहे हैं। यदि आपकी एक आज्ञा उपयुक्त है, तो चलता है, बाकी सब फ्लश हो जाएगा।

ट्रिक इस तरह कमांड का उपयोग करना है apt-get install --yes denyhosts </dev/null। इससे apt-get को एक अलग इनपुट मिलता है, और यह आपकी स्क्रिप्ट के बाकी हिस्सों के बजाय बस फ्लश / देव / अशक्त करता है।

यदि आप दूरस्थ स्क्रिप्ट के माध्यम से कुछ स्थापित करने का एक पूरा उदाहरण देखना चाहते हैं, तो आप इस स्क्रिप्ट को डेनिहोस्ट सेट करने के लिए देखना चाहते हैं

रिकॉर्ड के लिए, मैं इसके लिए wget over curl को प्राथमिकता देता हूं, लेकिन wget भी ठीक होना चाहिए।


मैं कुछ इंटरैक्टिव साथ एक डमी स्क्रिप्ट के साथ की कोशिश की, यह दोस्त काम किया है .. मैं नहीं यह XD मिलता है dl.dropbox.com/u/11210438/lala.sh
फ़ाबियानो Soriani

4
#!/bin/sh
if [ ! -f "/tmp/flockonus-stack.sh" ]
then
    wget -O /tmp/flockonus-stack.sh http://dl.dropbox.com/u/11210438/flockonus-stack.sh
fi

sh /tmp/flockonus-stack.sh

4

इन सभी उदाहरणों में एक महत्वपूर्ण बिंदु याद आ रहा है। यदि आप url का उपयोग करते हैं http://dl.dropbox.com/u/11210438/flockonus-stack.sh, तो आपको इसे डाउनलोड करने के लिए हर बार स्क्रिप्ट का ऑडिट करना होगा, क्योंकि यह आपके और ड्रॉपबॉक्स के बीच नेटवर्क पथ पर किसी को भी संशोधित कर सकता है। आप पर स्विच करते हैं http रों : //dl.dropbox.com/u/11210438/flockonus-stack.sh , आप असुरक्षा की है कि स्रोत नहीं होगा।

(ड्रॉपबॉक्स http URL को https में रीडायरेक्ट करने की कोशिश करता है, लेकिन नेटवर्क अटैक के मामले में wget को कभी भी वास्तविक ड्रॉपबॉक्स से बात नहीं करनी पड़ेगी, और वह रीडायरेक्ट कभी नहीं देखेगा)


2
यह शायद सवाल पर टिप्पणी के रूप में बेहतर है, जवाब नहीं, क्योंकि यह सवाल का सही जवाब नहीं देता है। अभी भी निश्चित रूप से इंगित करने के लायक है!
बिल वीस

2

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

उदाहरण के लिए:

!#/bin/bash

#Change to temp directory
cd /tmp

#Download file using wget
wget http://dl.dropbox.com/u/11210438/flockonus-stack.sh

#Execute the file

sh flockonus-stack.sh

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