2011-06-04 09:01:23 +0000 2011-06-04 09:01:23 +0000
12
12

Uruchom skrypt powłoki za pomocą przycisku html

Chcę uruchomić skrypt bash, gdy przycisk jest wciśnięty na stronie internetowej. To jest moja pierwsza próba:

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

Ale nie ma szczęścia. Jakieś sugestie?

EDIT- Podążając za radami slhclk'a i mit'a:

Mam plik php w /var/www, do którego kieruję moją przeglądarkę internetową. Zawartość pliku jest następująca:

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

tesh.sh zawiera to:

screen -S server1 -X quit

Jeśli w shellu wpiszę /home/aa/scripts/test.sh, skrypt jest w stanie się wykonać. Jednakże, gdy skieruję moją przeglądarkę internetową na http://example.com/screen.php (który zawiera powyższy kod), widzę pustą stronę, a skrypt nie został wykonany. Oba mają uprawnienia execute. Dlaczego to nie działa?

Odpowiedzi (5)

11
11
11
2011-06-04 09:37:02 +0000

To, co próbujesz zrobić, nie jest możliwe w ten sposób.

Zauważ, że zawsze są dwie strony: Strona klienta i strona serwera. Czy skrypt znajduje się na komputerze klienckim czy na serwerze?


Jeśli jest na kliencie: Ty jako odwiedzający widzisz tylko stronę HTML. onClick będzie w stanie uruchomić tylko JavaScript (lub inne języki skryptowe ), ale nie dowolny skrypt powłoki, który rezyduje na twoim komputerze. Skrypty HTML działają tylko w przeglądarce i mogą robić tylko ograniczone rzeczy. Co najważniejsze, nie mogą wchodzić w interakcję z Twoim komputerem.

Pomyśl o tym: Skąd przeglądarka wiedziałaby, jak otworzyć plik? Czy nie sądzisz, że to również stanowiłoby problem bezpieczeństwa - zwykła strona internetowa wywołująca wykonanie skryptów na komputerze klienta? Co by było, gdyby istniało coś w stylu onClick('rm -rf /home/user')?

Alternatywą byłoby uruchomienie apletu Javy, jeśli chcesz, aby kod był wykonywany na kliencie, ale to nie jest dokładnie to samo i jest to coś naprawdę skomplikowanego. Nie sądzę, że jest to konieczne, aby wyjaśnić to szczegółowo.


Jeśli skrypt jest na serwerze:Jeśli chcesz uruchomić skrypt po stronie serwera, a użytkownik ma wywołać jego wykonanie, to musisz użyć języka programowania po stronie serwera. Zwykły HTML tego nie zrobi, ponieważ jest to mniej lub bardziej statyczny plik. Jeśli chcesz wejść w interakcję z serwerem, możesz na przykład użyć PHP .

Posiada on funkcję exec do uruchamiania skryptu z wiersza poleceń, który jest przechowywany na serwerze WWW. Więc w zasadzie możesz napisać exec('/path/to/name.sh'); i to uruchomiłoby skrypt na serwerze.

Jednak samo umieszczenie tego w onClick nie wystarczy. Jeśli nie masz jeszcze pojęcia o PHP i programowaniu stron internetowych po stronie serwera, możesz najpierw przeczytać kilka tutoriali, a następnie wrócić z bardziej szczegółowym pytaniem.


Jeśli masz plik php z odpowiednią komendą exec(...), upewnij się, że skrypt ma ustawione uprawnienia execute nie tylko dla użytkownika, ale także dla grupy, w której znajduje się serwer WWW, czyli w najprostszym przypadku po prostu 777.

W razie problemów sprawdź wartość zwracaną przez skrypt za pomocą echo exec(...);, aby zobaczyć, czy nie ma żadnych błędów.

Możesz również uruchomić skrypt z wiersza poleceń, a nie z przeglądarki za pomocą php /path/to/file.php.

4
4
4
2011-06-04 09:50:25 +0000

Do tego potrzebna jest inteligencja po stronie serwera. Sam HTML nie jest wystarczający, ponieważ jest statyczny. Jednym z popularnych sposobów jest php. Wiele ofert hostingowych ma domyślnie zainstalowany php.

Możesz użyć programu ftp, aby umieścić plik tekstowy w katalogu głównym swojego serwera.

Plik tekstowy może mieć nazwę “run.php” i następującą treść:

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

Załóżmy, że twoja domena to “example.com”, jeśli odwiedzisz tę stronę w przeglądarce: http://example.com/run.php

to na serwerze zostanie wykonany plik php. Wyśle on do przeglądarki stronę HTML z nagłówkiem. A skrypt zostanie wykonany na serwerze.

Jest kilka rzeczy, o których należy pamiętać i kilka możliwych ulepszeń:

1) każdy będzie mógł trafić na tę stronę, również roboty. Mógłbyś zabezpieczyć stronę za pomocą htacces.

2) Ta strona odpali się w przypadku normalnego żądania “GET” z przeglądarki. Jednak wymaga ona akcji na serwerze, a jeśli ta akcja zmienia dane lub robi coś ważnego, lepiej byłoby odpalać skrypt tylko przy żądaniu POST.

3) Możesz wstawić formularz / przycisk, aby móc przeładować / wykonać ponownie stronę. Upewnij się, że używasz właściwej metody (GET lub POST) w atrybucie method oświadczenia formularza HTML.

4) Dobrze byłoby uzyskać wynik działania skryptu powłoki (kod rturn i być może wyjście tekstowe) i zapisać go w przeglądarce. Ma to wystarczająco dużo problemów na osobne pytanie : )

3
3
3
2012-01-06 06:21:27 +0000

To może być problem z uprawnieniami.

Kiedy wywołujesz go za pomocą webapp, to apache uruchamia skrypt. Jeśli apache nie ma uprawnień do uruchamiania skryptu, to nie będzie działać.

Rozwiązanie: sprawdź uprawnienia i spróbuj ponownie… :)

1
1
1
2018-08-11 08:36:42 +0000

Wiem, że jest to spóźnione, ale myślę, że warto zauważyć, że konfiguracja CGI na serwerze pozwoli ci uruchomić skrypt bash po stronie serwera bez użycia PHP lub czegokolwiek w tym rodzaju.

Wiem, że to nie jest odpowiedź na zaktualizowane pytanie, ale znalazłem to, próbując samemu coś wymyślić, więc pomyślałem, że to opublikuję!

0
0
0
2018-11-09 17:43:32 +0000

Aby uruchamiać skrypty powłoki bezpośrednio z przeglądarki, powinieneś dodać tę regułę do swojego pliku .htaccess:

Options +ExecCGI
AddHandler cgi-script .sh

To mówi serwerowi WWW, aby traktował pliki .sh jako skrypty CGI. Nie zapomnij zmienić uprawnień do plików .sh na 755.