html 버튼으로 쉘 스크립트 실행


12

웹 사이트에서 버튼을 누르면 bash 스크립트를 시작하고 싶습니다. 이것은 나의 첫 번째 시도입니다.

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

그러나 운이 없다. 어떤 제안?

편집 - 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 (위 코드가 있음) 를 가리키면 빈 페이지가 표시되고 스크립트가 실행되지 않았습니다. 둘 다 실행 권한이 있습니다. 왜 작동하지 않습니까?


이것이 어떤 종류의 웹 서버인지 아는 것이 흥미로울 것입니다. 예를 들어, 홈 리눅스 서버, XAMPP가 설치된 Windows 시스템 또는 대규모 호스트의 도메인 이름을 가진 표준 웹 사이트 대량 호스팅 제안이 될 수 있습니까?
mit

내가
빌린

1
이것은 실제로 Dup입니다. 심지어 동일한 사용자가 "" stackoverflow.com/questions/6235785/… , 여기에 작업 답변을 게시했습니다. 링크 된 느낌을
느꼈습니다

답변:


11

당신이하려는 것은 그렇게 할 수 없습니다.

클라이언트 쪽과 서버쪽에는 항상 두 가지 측면이 있습니다. 스크립트가 클라이언트 컴퓨터 또는 서버에 있습니까?


클라이언트 인 경우 : 방문자로서 귀하는 HTML 웹 사이트 만 볼 수 있습니다. onClick자바 스크립트 (또는 다른 스크립팅 언어 ) 만 실행할 수 있지만 컴퓨터에있는 임의의 쉘 스크립트는 실행할 수 없습니다. HTML 스크립트는 브라우저에서만 실행되며 제한된 작업 만 수행 할 수 있습니다. 가장 중요한 것은 컴퓨터와 상호 작용할 수 없다는 것입니다.

생각해보십시오 : 브라우저가 파일을 여는 방법을 어떻게 알 수 있습니까? 이것이 보안 문제라고 생각하지 않습니까? 클라이언트 컴퓨터에서 스크립트 실행을 트리거하는 일반 웹 사이트입니까? 같은 것이 있다면 onClick('rm -rf /home/user')어떨까요?

대안은 클라이언트에서 코드를 실행하려는 경우 Java 애플릿을 실행하는 것입니다. 그러나 정확히 동일하지는 않으며 실제로는 복잡합니다. 나는 이것을 자세히 설명 할 필요가 없다고 생각합니다.


스크립트가 서버에있는 경우 : 서버 측에서 스크립트를 실행하고 사용자가 실행을 트리거하도록하려면 서버 측 프로그래밍 언어를 사용해야합니다. 정적 파일이기 때문에 HTML만으로는 작동하지 않습니다. 서버와 상호 작용하려면 PHP 를 사용할 수 있습니다 .

그것은이 exec웹 서버에 저장되어있는 명령 줄 스크립트를 실행하는 기능. 따라서 기본적으로 exec('/path/to/name.sh');서버에서 스크립트를 작성 하고 실행할 수 있습니다.

그러나 이것을 넣는 것만으로 onClick는 충분하지 않습니다. PHP와 서버 측 웹 프로그래밍에 대해 아직 모른다면, 몇 가지 튜토리얼을 먼저 읽은 다음보다 구체적인 질문으로 다시 돌아가고 싶을 것입니다.


적절한 exec(...)명령 으로 php 파일을 가지고 있다면 , 스크립트는 사용자뿐만 아니라 웹 서버가 속한 그룹에 대해 실행 권한이 설정되어 있는지 확인하십시오 777.

문제가 발생하면 스크립트의 반환 값을 확인하여 오류가 있는지 확인 echo exec(...);하십시오.

를 사용하는 브라우저가 아닌 명령 줄에서 스크립트를 실행할 수도 있습니다 php /path/to/file.php.


철저한 답변에 감사드립니다. 쉘 스크립트는 내 컴퓨터에 있습니다. 나는 당신이 쓴 것을 시도하고 있지만 문제가 발생합니다. 위의 질문을 편집했습니다
dukevin

좋아, 이것은 다른 문제입니다. 실제로 PHP가 설치되어 있습니까? exec을 작성 하여 줄 의 리턴 코드를 얻으십시오 echo exec(...);. 또한 스크립트에는 사용자뿐만 아니라 웹 서버가 실행되는 그룹에 대한 실행 권한이 필요합니다.
slhck

예, 두 파일 모두에 chmod 777이 있습니다. 그리고 이상한 결과로 쉘에서 직접 PHP를 실행하려고했습니다. pastebin.com/eU0xTkp2 그러나, 나는 PHP를 설치하고 확인했으며 php -v사람들이 파일을 편집 할 수 있도록 phpfilemanager를 가지고 있다는 사실. 왜 PHP 인터프리터를 사용하지 않습니까?
dukevin

php /var/www/trash/run.phpPHP 파일 이름 자체뿐만 아니라 이를 실행해야 합니다.
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) 페이지를 다시로드 / 실행할 수 있도록 양식 / 버튼 문을 삽입 할 수 있습니다. HTML 양식 문의 method 속성에 올바른 메소드 (GET 또는 POST)를 사용해야합니다.

4) 쉘 스크립트의 결과 (반환 코드 및 텍스트 출력)를 가져 와서 브라우저에 쓰는 것이 좋습니다. 이것은 별도의 qustion에 대한 충분한 문제가 있습니다 :)


3

권한 문제 일 수 있습니다.

webapp 사용하여 트리거 하면 스크립트를 실행하는 것이 아파치 입니다. 경우 아파치가 스크립트를 실행할 수있는 권한이 없습니다 작동하지 않습니다.

해결 방법 : 권한을 확인하고 다시 시도하십시오 .. :)


1

나는 이것이 늦다는 것을 알고 있지만 서버에서 CGI를 구성하면 PHP 나 그 밖의 어떤 것도 사용하지 않고 서버 측 bash 스크립트를 실행할 수 있다는 점에 주목할 가치가 있다고 생각합니다.

나는 이것이 업데이트 된 질문을 해결하지 못한다는 것을 알고 있지만, 나 자신을 알아 내려고 할 때 이것을 발견하여 게시 할 것이라고 생각했습니다!


0

브라우저에서 직접 쉘 스크립트를 실행하려면이 규칙을 .htaccess 파일에 추가해야합니다.

Options +ExecCGI
AddHandler cgi-script .sh

이것은 웹 서버에게 .sh 파일을 CGI 스크립트로 취급하도록 지시합니다. .sh 파일 권한을 755로 변경하는 것을 잊지 마십시오.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.