Запустите скрипт оболочки с помощью кнопки HTML

12

Я хочу запустить скрипт bash при нажатии кнопки на веб-сайте. Это моя первая попытка:

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

Но не повезло. Какие-либо предложения?

Edit- Следуя совету slhclk в Массачусетском технологическом институте и:

У меня есть файл 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 (с кодом выше), я вижу пустую страницу, и сценарий не выполняется. Оба имеют разрешения на выполнение. Почему это не работает?

dukevin
источник
Было бы интересно узнать, что это за веб-сервер. Например, это может быть домашний Linux-сервер, Windows-машина с XAMPP или стандартное предложение массового хостинга веб-сайтов с доменным именем от крупного хостера?
с
Я нахожусь на Debian Lenny, который работает с vps, которую я
снимаю
1
Это действительно Dup этого, даже спросил тот же пользователь ">> 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.

slhck
источник
Большое спасибо за подробный ответ. Сценарий оболочки находится на моем компьютере. Я пытаюсь то, что вы написали, однако я столкнулся с проблемой. Я редактировал мой вопрос выше
Dukevin
Хорошо, тогда это другая проблема. У вас на самом деле установлен PHP? Попробуйте получить код возврата execстроки, написав echo exec(...);. Также обратите внимание, что скрипту нужны разрешения на выполнение для группы, в которой работает ваш веб-сервер, а не только для вашего пользователя.
slhck
да у меня chmod 777 на обоих файлах. И я попытался запустить PHP прямо из оболочки с странными результатами. pastebin.com/eU0xTkp2 Однако, у меня есть установленный php, подтвержденный php -vи тот факт, что у меня есть phpfilemanager для людей, на которых можно редактировать файлы. Почему он не использует интерпретатор php?
Dukevin
Вам нужно запустить его, 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) Было бы хорошо получить результат сценария оболочки (код возврата и, возможно, вывод текста) и записать его в браузер. Этого достаточно для отдельного вопроса:)

мит
источник
3

Это может быть проблема с разрешением.

Когда вы запускаете его с помощью webapp , скрипт запускает apache . Если у apache нет разрешения на запуск скрипта, он не будет работать.

Решение: проверьте разрешение и попробуйте еще раз .. :)

user635568
источник
1

Я знаю, что это слишком поздно, но я думаю, что стоит отметить, что настройка CGI на сервере позволит вам запускать серверный сценарий bash без использования PHP или чего-либо подобного.

Я знаю, что это не относится к обновленному вопросу, но я обнаружил это, когда пытался сам разобраться, поэтому я решил опубликовать это!

Torreh
источник
0

Чтобы запускать сценарии оболочки прямо из браузера, вы должны добавить это правило в ваш файл .htaccess:

Options +ExecCGI
AddHandler cgi-script .sh

Это говорит веб-серверу обрабатывать файлы .sh как CGI-скрипты. Не забудьте изменить права доступа к файлу .sh на 755.

Агнель Вишал
источник