Запустіть скрипт оболонки за допомогою кнопки html


12

Я хочу запустити скрипт bash при натисканні кнопки на веб-сайті. Це моя перша спроба:

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

Але не пощастило. Будь-які пропозиції?

EDIT - Дотримуючись порад slhclk та mit:

У мене є файл php в / var / www, на який я вказую свій веб-браузер. Вміст файлу такий:

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

tesh.sh містить це:

screen -S server1 -X quit

Якщо я ввожу /home/aa/scripts/test.shоболонку, сценарій може виконуватись. Однак, коли я вказую веб-браузер на http://example.com/screen.php (який має код вище), я бачу порожню сторінку, і сценарій не виконується. Обидва мають дозволи на виконання. Чому це не працює?


Було б цікаво дізнатися, що це за веб-сервер. Наприклад, це може бути домашній сервер Linux, Windows-машина з XAMPP або стандартна пропозиція масового розміщення веб-сайтів з доменним іменем від великого хостера?
mit

Я перебуваю на debian lenny, який працює з vps, який я
орендую

1
Це справді дуп, про це навіть запитував той самий користувач ">> stackoverflow.com/questions/6235785/… , де я опублікував свою робочу відповідь. Відчув, що їх слід пов’язати.
FreeSoftwareServers

Відповіді:


11

Те, що ви намагаєтеся зробити, неможливо таким чином.

Зауважте, що для цього завжди є дві сторони: сторона клієнта та сервер. Чи сценарій на клієнтському комп'ютері чи на сервері?


Якщо клієнт: Ви як відвідувач бачите лише веб-сайт HTML. onClickзможе запускати JavaScript (або інші мови сценаріїв ), але не будь-який довільний скрипт оболонки, який знаходиться на вашому комп’ютері. Сценарії HTML запускаються лише в браузері і можуть робити лише обмежені дії. Найголовніше, що вони не можуть взаємодіяти з вашим комп'ютером.

Подумайте: як браузер знав, як відкрити файл? Ви не вважаєте, що це також буде проблемою безпеки - звичайним веб-сайтом, який запускає виконання сценаріїв на комп'ютері клієнта? Що робити, якщо було щось подібне onClick('rm -rf /home/user')?

Альтернативою було б запустити аплет Java, якщо ви хочете, щоб код виконувався на клієнті, але це не зовсім те саме, і це щось справді складне. Я не думаю, що це потрібно пояснювати детально.


Якщо сценарій знаходиться на сервері: Якщо ви хочете запустити скрипт на стороні сервера і змусити користувача запустити його виконання, вам потрібно використовувати мову програмування на стороні сервера. Просто HTML цього не зробить, оскільки це більш-менш статичний файл. Якщо ви хочете взаємодіяти з сервером, ви можете, наприклад, використовувати PHP .

Він має execфункцію запуску сценарію командного рядка, який зберігається на веб-сервері. Таким чином, ви можете написати, exec('/path/to/name.sh');і він запустив би сценарій на сервері.

Однак, просто вкласти це onClickтут недостатньо. Якщо ви ще не знаєте про PHP та веб-програмування на стороні сервера, вам варто спершу прочитати кілька навчальних посібників, а потім повернутися з більш конкретним питанням.


Якщо у вас є файл php з відповідною exec(...)командою, переконайтеся, що сценарій виконує дозволи, встановлені не тільки для користувача, але і для групи, на якій знаходиться веб-сервер, тому в найпростішому випадку просто 777.

У разі виникнення неполадок перевірте повернене значення сценарію, echo exec(...);щоб побачити, чи є помилки.

Ви також можете запустити скрипт з командного рядка, а не з браузера за допомогою php /path/to/file.php.


Дуже дякую за ретельну відповідь. Скрипт оболонки знаходиться на моєму комп’ютері. Я намагаюся те, що ви написали, однак, я стикаюся з проблемою. Я відредагував своє запитання вище
герцог

Гаразд, тоді це вже інше питання. Насправді у вас встановлений PHP? Спробуйте отримати зворотний код execрядка, написавши echo exec(...);. Також зауважте, що сценарій потребує виконання дозволів для групи, на якій працює ваш веб-сервер, а не лише для вашого користувача.
slhck

так, у мене є chmod 777 в обох файлах. І я спробував запустити php прямо з оболонки із дивними результатами. pastebin.com/eU0xTkp2 Однак у мене встановлено php, підтверджено php -vі тим, що у мене є phpfilemanager для редагування файлів. Чому він не використовує інтерпретатор php?
герцог

Вам потрібно запустити його, php /var/www/trash/run.phpа не лише саме ім'я файлу PHP.
slhck

1
Не річ! Я не надто впевнений у специфіці, але повинен бути, тому що коли ви запускаєте його з командного рядка, ви запускаєте його як правильного користувача, тоді як при запуску з браузера користувач відсутній. Вам потрібно перевірити це в сценарії оболонки, я думаю.
slhck

4

Для цього вам потрібна деяка серверна розвідка. HTML тільки недостатньо, тому що він статичний. Одним із поширених способів буде php. У багатьох розміщених пропозиціях за замовчуванням встановлено 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) Ви можете вставити заяву форми / кнопки, щоб мати змогу знову завантажити / виконати сторінку. Обов’язково використовуйте правильний метод (GET або POST) в атрибуті методу оператора форми HTML.

4) Було б добре отримати результат скрипту оболонки (код rturn і, можливо, виведення тексту) і записати його в браузер. У цьому є достатньо проблем для окремої реакції:)


3

Це може бути проблема дозволу.

Коли ви запустили його за допомогою webapp , скрипт запускає apache . Якщо apache не має дозволу на запуск сценарію, він не працює.

Рішення: перевірте дозвіл і повторіть спробу .. :)


1

Я знаю, що це запізнення, але я думаю, що варто відзначити, що конфігурування CGI на сервері дозволить вам запустити скрипт bash на базі сервера, не використовуючи PHP або щось подібне.

Я знаю, що це не стосується оновленого питання, але я виявив це, намагаючись розібратися в речах, тому я зрозумів, що опублікую його!


0

Для запуску скриптів оболонки безпосередньо з браузера, ви повинні додати це правило до свого файлу .htaccess:

Options +ExecCGI
AddHandler cgi-script .sh

Це повідомляє веб-серверу трактувати .sh файли як сценарії CGI. Не забудьте змінити .sh файли дозволу на 755.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.