Uruchom skrypt powłoki za pomocą przycisku HTML

12

Chcę uruchomić skrypt bash po naciśnięciu przycisku na stronie internetowej. To moja pierwsza próba:

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

Ale bez powodzenia. Jakieś sugestie?

EDYCJA- Zgodnie ze wskazówkami slhclk i mit:

Mam plik php w / var / www, na który wskazuję moją przeglądarkę. Zawartość pliku jest następująca:

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

tesh.sh zawiera to:

screen -S server1 -X quit

Jeśli piszę /home/aa/scripts/test.shw powłoce, skrypt jest w stanie wykonać. Jednak gdy wskazuję przeglądarkę internetową na http://example.com/screen.php (która zawiera powyższy kod), widzę pustą stronę i skrypt nie został wykonany. Oba mają uprawnienia do wykonywania. Dlaczego to nie działa?

dukevin
źródło
Interesujące byłoby wiedzieć, jaki to jest serwer sieciowy. Na przykład może to być domowy serwer Linux, maszyna z systemem Windows z XAMPP lub standardowa oferta masowego hostingu witryny z nazwą domeny od dużego hostera?
mit
Jestem na Debianie Lenny, która ucieka z VPS, którą wypożyczam
dukevin
1
To jest naprawdę duplikat tego, nawet zadany przez tego samego użytkownika ">> stackoverflow.com/questions/6235785/... , gdzie zamieściłem moją roboczą odpowiedź. Czułem, że powinny być połączone.
FreeSoftwareServers

Odpowiedzi:

11

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

Pamiętaj, że zawsze istnieją dwie strony: po stronie klienta i po stronie serwera. Czy skrypt jest na komputerze klienckim lub na serwerze?


Jeśli jest na kliencie: Ty jako gość widzisz tylko witrynę HTML. onClickbędzie mógł uruchomić JavaScript (lub inne języki skryptowe ), ale nie dowolny skrypt powłoki, który znajduje się na twoim komputerze. Skrypty HTML działają tylko w przeglądarce i mogą wykonywać tylko ograniczone czynności. Co najważniejsze, nie mogą wchodzić w interakcje z komputerem.

Pomyśl o tym: skąd przeglądarka wiedziałaby, jak otworzyć plik? Czy nie uważasz, że byłby to również problem z bezpieczeństwem - zwykła strona internetowa uruchamiająca wykonywanie skryptów na komputerze klienta? Co jeśli było coś takiego onClick('rm -rf /home/user')?

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


Jeśli skrypt znajduje się na serwerze: Jeśli chcesz uruchomić skrypt po stronie serwera i pozwolić, aby użytkownik uruchomił jego wykonanie, musisz użyć języka programowania po stronie serwera. Po prostu HTML tego nie zrobi, ponieważ jest to mniej więcej plik statyczny. Jeśli chcesz wchodzić w interakcje z serwerem, możesz na przykład użyć PHP .

Ma execfunkcję uruchamiania skryptu wiersza poleceń, który jest przechowywany na serwerze WWW. Zasadniczo można pisać exec('/path/to/name.sh');i uruchamiać skrypt na serwerze.

Jednak samo włożenie tego w onClickto nie wystarczy. Jeśli nie wiesz jeszcze o PHP i programowaniu WWW po stronie serwera, możesz najpierw przeczytać kilka samouczków, a następnie wrócić z bardziej szczegółowym pytaniem.


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

W przypadku problemów sprawdź wartość zwracaną skryptu, echo exec(...);aby sprawdzić, czy są jakieś błędy.

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

slhck
źródło
Bardzo dziękuję za dokładną odpowiedź. Skrypt powłoki znajduje się na moim komputerze. Próbuję tego, co napisałeś, jednak mam problem. Zredagowałem moje pytanie powyżej
dukevin
Okej, to inny problem. Czy faktycznie masz zainstalowany PHP? Spróbuj uzyskać kod powrotu execwiersza, pisząc echo exec(...);. Pamiętaj też, że skrypt wymaga uprawnień do wykonywania dla grupy, na której działa serwer, nie tylko dla użytkownika.
slhck
tak, mam chmod 777 na obu plikach. I próbowałem uruchomić php bezpośrednio z powłoki z dziwnymi wynikami. pastebin.com/eU0xTkp2 Mam jednak php zainstalowany, potwierdzony php -vi fakt, że mam phpfilemanager dla ludzi do edycji plików. Dlaczego nie używa interpretera php?
dukevin
Musisz go uruchomić, php /var/www/trash/run.phpa nie samą nazwę pliku PHP.
slhck
1
Nic nie ma! Nie jestem zbyt pewny co do szczegółów, ale powinno być tak, ponieważ kiedy uruchamiasz go z wiersza poleceń, uruchamiasz go jako poprawny użytkownik, podczas gdy podczas uruchamiania z przeglądarki użytkownika brakuje. Chyba musisz to sprawdzić w skrypcie powłoki.
slhck
4

Potrzebujesz do tego inteligencji po stronie serwera. Sam HTML nie wystarczy, ponieważ jest statyczny. Jednym z powszechnych sposobów jest php. Wiele hostowanych ofert ma domyślnie zainstalowane php.

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

Plik tekstowy może mieć nazwę „run.php” o następującej treści:

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

Załóżmy, że twoja domena to „example.com”, jeśli odwiedzasz tę stronę w przeglądarce:

http://example.com/run.php

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

Należy pamiętać o kilku rzeczach i możliwych ulepszeniach:

1) wszyscy będą mogli wejść na tę stronę, także roboty. Możesz zabezpieczyć stronę za pomocą htacces.

2) Ta strona zostanie uruchomiona w przypadku normalnego żądania „GET” z przeglądarki. Ale inwoluje akcję na serwerze i jeśli ta akcja zmienia dane lub robi coś ważnego, lepiej byłoby uruchomić skrypt tylko na żądanie POST.

3) Możesz wstawić instrukcję formularza / przycisku, aby móc ponownie załadować / wykonać stronę ponownie. Pamiętaj, aby użyć właściwej metody (GET lub POST) w atrybucie metody instrukcji formularza HTML.

4) Dobrze byłoby uzyskać wynik skryptu powłoki (kod powrotu i być może tekst) i zapisać go w przeglądarce. Ma to wystarczająco dużo problemów do osobnego pytania:)

mit
źródło
3

Może to być problem z pozwoleniem.

Kiedy wyzwalane go za pomocą webapp , to Apache , który uruchamia skrypt. Jeśli apache nie ma uprawnień do uruchomienia skryptu, nie będzie działać.

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

użytkownik635568
źródło
1

Wiem, że jest już późno, 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 innego.

Wiem, że to nie dotyczy zaktualizowanego pytania, ale znalazłem to, próbując samemu coś wymyślić, więc pomyślałem, że opublikuję to!

Torreh
źródło
0

Aby uruchomić skrypty powłoki bezpośrednio z przeglądarki, należy dodać tę regułę do pliku .htaccess:

Options +ExecCGI
AddHandler cgi-script .sh

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

Agnel Vishal
źródło