एक html बटन के साथ एक शेल स्क्रिप्ट चलाएँ


12

जब एक वेबसाइट पर एक बटन दबाया जाता है तो मैं बैश स्क्रिप्ट लॉन्च करना चाहता हूं। यह मेरा पहला प्रयास है:

<button type="button" onclick="/path/to/name.sh">Click Me!</button>

लेकिन कोई किस्मत नहीं। कोई सुझाव?

संपादित slhclk की और एमआईटी की सलाह के बाद:

मेरे पास / var / www में एक php फ़ाइल है जिसे मैं अपने वेब-ब्राउज़र को इंगित करता हूं। फ़ाइल की सामग्री इस प्रकार है:

<?php
exec("/home/aa/scripts/test.sh");
?>

tesh.sh में यह शामिल है:

screen -S server1 -X quit

यदि मैं /home/aa/scripts/test.shशेल में टाइप करता हूं , तो स्क्रिप्ट निष्पादित करने में सक्षम है। हालाँकि, जब मैं अपने वेब-ब्राउज़र को http://example.com/screen.php (जो ऊपर कोड है) इंगित करता हूं, तो मुझे एक खाली पृष्ठ दिखाई देता है और स्क्रिप्ट निष्पादित नहीं हुई थी। दोनों के पास अनुमतियाँ हैं। यह काम क्यों नहीं करता है?


यह जानना दिलचस्प होगा कि यह किस तरह का वेब सर्वर है। उदाहरण के लिए, यह एक होम लाइनक्स सर्वर हो सकता है, XAMPP के साथ एक विंडोज़ मशीन या एक बड़े होस्टर से डोमेन नाम के साथ एक मानक वेबसाइट मास होस्टिंग ऑफर?
मितल

मैं डेबियन
लेनी पर

1
यह वास्तव में इसका एक डुप है, यहां तक ​​कि एक ही उपयोगकर्ता द्वारा पूछा गया ">> stackoverflow.com/questions/6235785/… , जहां मैंने अपना काम करने का उत्तर पोस्ट किया। लगा कि उन्हें लिंक किया जाना चाहिए।
FreeSoftwareServers

जवाबों:


11

आप जो करना चाह रहे हैं, वह संभव नहीं है।

ध्यान दें कि हमेशा दो पक्ष होते हैं: ग्राहक पक्ष और सर्वर पक्ष। क्लाइंट कंप्यूटर पर या सर्वर पर स्क्रिप्ट है?


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

इसके बारे में सोचें: ब्राउज़र को फ़ाइल खोलने का तरीका कैसे पता चलेगा? क्या आपको नहीं लगता कि यह एक सुरक्षा मुद्दा होगा - एक ग्राहक की कंप्यूटर पर स्क्रिप्ट के निष्पादन को ट्रिगर करने वाली एक सादे वेबसाइट? अगर ऐसा कुछ होता तो क्या होता onClick('rm -rf /home/user')?

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


यदि स्क्रिप्ट सर्वर पर है: यदि आप सर्वर साइड पर स्क्रिप्ट चलाना चाहते हैं और उपयोगकर्ता को इसके निष्पादन को ट्रिगर करना है, तो आपको सर्वर साइड प्रोग्रामिंग भाषा का उपयोग करने की आवश्यकता है। बस HTML ऐसा नहीं करेगा, क्योंकि यह एक स्थिर फ़ाइल है। यदि आप सर्वर के साथ बातचीत करना चाहते हैं, तो आप उदाहरण के लिए PHP का उपयोग कर सकते हैं ।

यह execएक कमांड लाइन स्क्रिप्ट चलाने के लिए फ़ंक्शन है जो वेब सर्वर पर संग्रहीत है। इसलिए मूल रूप से, आप लिख सकते हैं exec('/path/to/name.sh');और यह स्क्रिप्ट को सर्वर पर चलाएगा।

हालाँकि, इसको इसमें डालना onClickपर्याप्त नहीं है। यदि आप अभी तक PHP और सर्वर साइड वेब प्रोग्रामिंग के बारे में नहीं जानते हैं, तो आप पहले कुछ ट्यूटोरियल पढ़ना चाहते हैं और फिर एक अधिक विशिष्ट प्रश्न के साथ वापस आ सकते हैं।


यदि आपके पास उपयुक्त exec(...)कमांड के साथ एक php फाइल है , तो सुनिश्चित करें कि स्क्रिप्ट ने न केवल उपयोगकर्ता के लिए, बल्कि वेब सर्वर में समूह के लिए भी अनुमत अनुमतियों को निष्पादित किया है, इसलिए सबसे सरल स्थिति में 777

echo exec(...);यदि कोई त्रुटि हो तो यह देखने के लिए स्क्रिप्ट के वापसी मान के लिए समस्या की जाँच करें ।

आप स्क्रिप्ट को कमांड लाइन से भी चला सकते हैं और ब्राउजर से नहीं php /path/to/file.php


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

ठीक है, यह एक अलग मुद्दा है। क्या आपके पास वास्तव में PHP स्थापित है? execलिखकर लाइन का रिटर्न कोड प्राप्त करने का प्रयास करें echo exec(...);। यह भी ध्यान दें कि स्क्रिप्ट को आपके वेबसर्वर पर चलने वाले समूह के लिए अनुमतियों की आवश्यकता होती है, न कि केवल आपके उपयोगकर्ता पर।
slhck

हाँ, मैं दोनों फ़ाइलों पर 777 chmod है। और मैंने अजीब परिणामों के साथ शेल से सीधे php चलाने की कोशिश की। pastebin.com/eU0xTkp2 हालाँकि, मेरे पास php स्थापित है, इस बात की पुष्टि php -vऔर इस तथ्य के साथ कि मेरे पास लोगों के लिए phpfilemanager है जिन पर फाइलों को संपादित करना है। यह php दुभाषिया का उपयोग क्यों नहीं कर रहा है?
डुकविन

आपको इसे php /var/www/trash/run.phpकेवल PHP फ़ाइल नाम के साथ ही चलाने की आवश्यकता है।
15'11

1
कुछ भी नहीं! मैं विशेष पर निश्चित नहीं हूं, लेकिन यह होना चाहिए क्योंकि जब आप इसे कमांड लाइन से चलाते हैं, तो आप इसे सही उपयोगकर्ता के रूप में चलाते हैं, जबकि जब ब्राउज़र से चलाया जाता है, तो उपयोगकर्ता गायब होता है। आपको यह जांचने की आवश्यकता होगी कि आपके शेल स्क्रिप्ट के भीतर, मुझे लगता है।
slhck

4

इसके लिए आपको कुछ सर्वर साइड इंटेलिजेंस की जरूरत है। HTML अकेला पर्याप्त नहीं है, क्योंकि यह स्थिर है। एक सामान्य तरीका php होगा। कई होस्ट ऑफर डिफ़ॉल्ट रूप से स्थापित है।

आप अपने सर्वर की रूट डायरेक्टरी में टेक्स्ट फाइल डालने के लिए एक ftp प्रोग्राम का उपयोग कर सकते हैं।

टेक्स्टफाइल को निम्न सामग्री के साथ "run.php" नाम दिया जा सकता है:

<h3>Executing /path/to/name.sh</h3>
<?
exec('/path/to/name.sh');
?>

मान लीजिए कि आपका डोमेन "example.com" है, यदि आप इस पृष्ठ को अपने ब्राउज़र में देखते हैं:

http://example.com/run.php

फिर php फ़ाइल को सर्वर पर निष्पादित किया जाएगा। यह शीर्षक के साथ ब्राउज़र में एक HTML पेज भेजेगा। और स्क्रिप्ट को सर्वर पर निष्पादित किया जाएगा।

कुछ बातों को ध्यान में रखना है और कुछ संभावित सुधार हैं:

1) हर कोई इस पृष्ठ को हिट करने में सक्षम होगा, रोबोट भी। आप htacces वाले पेज को सुरक्षित कर सकते हैं।

2) यह पृष्ठ ब्राउज़र से एक सामान्य "GET" अनुरोध के मामले में आग लगा देगा। लेकिन यह सर्वर पर एक कार्रवाई करता है, और यदि यह कार्रवाई डेटा को जपती है या कुछ महत्वपूर्ण करती है, तो बेहतर होगा कि केवल POST अनुरोध पर स्क्रिप्ट को फायर किया जाए।

3) आप पृष्ठ को फिर से लोड / निष्पादित करने में सक्षम होने के लिए एक फॉर्म / बटन विवरण सम्मिलित कर सकते हैं। HTML फॉर्म स्टेटमेंट की विधि विशेषता में सही विधि (GET या POST) का उपयोग करना सुनिश्चित करें।

4) शेल स्क्रिप्ट (आरटर्न कोड और शायद टेक्स्ट आउटपुट) का परिणाम प्राप्त करना अच्छा होगा और इसे ब्राउज़र में लिखें। यह एक अलग qustion के लिए पर्याप्त मुद्दे हैं:)


3

यह एक अनुमति मुद्दा हो सकता है।

जब आपने इसे वेबप का उपयोग करके ट्रिगर किया , तो यह अपाचे है जो स्क्रिप्ट चलाता है। यदि अपाचे के पास स्क्रिप्ट चलाने की अनुमति नहीं है तो यह काम नहीं करेगा।

समाधान: अनुमति की जाँच करें और पुनः प्रयास करें .. :)


1

मुझे पता है कि यह देर से है, लेकिन मुझे लगता है कि यह ध्यान देने योग्य है कि एक सर्वर पर सीजीआई को कॉन्फ़िगर करना आपको PHP या किसी भी प्रकार का उपयोग किए बिना एक सर्वर-साइड बैश स्क्रिप्ट चलाने की अनुमति देगा।

मुझे पता है कि यह अद्यतन किए गए प्रश्न को संबोधित नहीं कर रहा है, लेकिन मुझे यह तब मिला जब मैं चीजों को जानने की कोशिश कर रहा था इसलिए मुझे लगा कि मैं इसे पोस्ट करूंगा!


0

ब्राउज़र से सीधे शेल स्क्रिप्ट चलाने के लिए, आपको इस नियम को अपनी .htaccess फ़ाइल में जोड़ना चाहिए:

Options +ExecCGI
AddHandler cgi-script .sh

यह वेब सर्वर को .sh फ़ाइलों को CGI लिपियों के रूप में मानता है। 755 पर .sh फ़ाइल अनुमतियां बदलना न भूलें।

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