htmlボタンを使用してシェルスクリプトを実行する


12

Webサイトでボタンが押されたときにbashスクリプトを起動したい。これは私の最初の試みです。

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

しかし、運はありません。助言がありますか?

編集- slhclkさんとMITのアドバイスを以下に示します。

/ var / wwwにphpファイルがあり、それをWebブラウザに向けています。ファイルの内容は次のとおりです。

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

tesh.shには次のものが含まれます。

screen -S server1 -X quit

/home/aa/scripts/test.shシェルに入力すると、スクリプトを実行できます。ただし、Webブラウザでhttp://example.com/screen.php(上記のコードを含む)を指定すると、空白のページが表示され、スクリプトが実行されませんでした。両方に実行権限があります。なぜ機能しないのですか?


これがどのようなWebサーバーであるかを知ることは興味深いでしょう。たとえば、ホームLinuxサーバー、XAMPPを備えたWindowsマシン、または大規模なホスティング事業者からのドメイン名を使用した標準的なWebサイトマスホスティングオファーでしょうか。
MIT

私は借りているvpsから実行されるdebian lennyにいます
-dukevin

1
これは本当に同じであっても、ユーザーが求めていたこののDUP、「>>ですstackoverflow.com/questions/6235785/...。私は私の働いて答えを掲載、それらがリンクされなければならないと感じました。
FreeSoftwareServers

回答:


11

あなたがしようとしていることは、そのようには不可能です。

クライアント側とサーバー側の2つの側面が常にあることに注意してください。スクリプトはクライアントコンピューターまたはサーバーのどちらにありますか?


クライアント上にある場合:訪問者としてのあなたはHTMLウェブサイトのみを見ています。onClickJavaScript(または他のスクリプト言語)のみを起動できますが、コンピューター上にある任意のシェルスクリプトは起動できません。HTMLスクリプトはブラウザでのみ実行され、限られた機能のみを実行できます。最も重要なのは、彼らがあなたのコンピューターと対話できないことです。

考えてみてください:ファイルを開く方法をブラウザはどのように知るでしょうか?これはセキュリティの問題でもあると思いませんか。クライアントのコンピューターでスクリプトの実行をトリガーする単純なWebサイトです。のようなものがあった場合はどうなりonClick('rm -rf /home/user')ますか?

クライアントでコードを実行したい場合は、Javaアプレットを実行することもできますが、これはまったく同じではなく、非常に複雑なものです。これを詳細に説明する必要はないと思います。


スクリプトがサーバー上にある場合サーバー側でスクリプトを実行し、ユーザーにその実行をトリガーさせる場合は、サーバー側のプログラミング言語を使用する必要があります。それは多かれ少なかれ静的ファイルであるため、HTMLだけではできません。サーバーとやり取りする場合は、たとえばPHPを使用できます

execWebサーバーに保存されているコマンドラインスクリプトを実行する機能があります。だから基本的に、あなたは書くことができexec('/path/to/name.sh');、サーバー上でスクリプトを実行するでしょう。

ただし、onClickここに入れるだけでは十分ではありません。PHPとサーバー側のWebプログラミングについてまだ知らない場合は、最初にいくつかのチュートリアルを読んでから、より具体的な質問に戻ってください。


適切なexec(...)コマンドを使用したphpファイルがある場合は、ユーザーだけでなくWebサーバーが属するグループに対してもスクリプトに実行権限が設定されていることを確認して777ください。

トラブルが発生した場合は、スクリプトの戻り値をチェックして、echo exec(...);エラーがあるかどうかを確認します。

また、ブラウザではなくコマンドラインからスクリプトを実行することもできphp /path/to/file.phpます。


徹底的な回答ありがとうございます。シェルスクリプトはコンピューターにあります。あなたが書いたものを試していますが、私は問題にぶつかっています。上記の質問を編集しました
-dukevin

さて、これは別の問題です。実際にPHPをインストールしていますか?を記述して、exec行の戻りコードを取得してくださいecho exec(...);。また、スクリプトには、ユーザーだけでなく、Webサーバーが実行されているグループの実行権限が必要であることに注意してください。
slhck

はい、両方のファイルにchmod 777があります。そして、私は奇妙な結果でシェルから直接PHPを実行しようとしました。pastebin.com/eU0xTkp2しかし、私はphpをインストールし、確認してphp -vおり、人々がファイルを編集するためのphpfilemanagerを持っていることを確認しています。なぜPHPインタープリターを使用しないのですか?
デュークビン

php /var/www/trash/run.phpPHPファイル名だけでなく、それを使用して実行する必要があります。
slhck

1
なんでもない!詳細についてはよくわかりませんが、コマンドラインから実行する場合は正しいユーザーとして実行するのに対し、ブラウザーから実行する場合はユーザーが見つからないためです。シェルスクリプト内で確認する必要があると思います。
slhck

4

これにはサーバー側のインテリジェンスが必要です。HTMLだけでは、静的なので十分ではありません。一般的な方法の1つは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)シェルスクリプトの結果(リターンコード、および場合によってはテキスト出力)を取得して、ブラウザーに書き込むとよいでしょう。これには別の質問に十分な問題があります:)


3

許可の問題である可能性があります。

webappを使用してトリガーした場合、スクリプトを実行するのはApacheです。apacheにスクリプトを実行する権限がない場合、スクリプトは機能しません。

解決策:許可を確認して再試行してください。


1

私はこれがかなり遅いことを知っていますが、サーバー上でCGIを構成すると、PHPなどを使用せずにサーバー側のbashスクリプトを実行できることに注意する価値があると思います。

私はこれが更新された質問に対処していないことを知っていますが、自分で物事を理解しようとしたときにこれを見つけたので、私はそれを投稿すると思いました!


0

ブラウザから直接シェルスクリプトを実行するには、このルールを.htaccessファイルに追加する必要があります。

Options +ExecCGI
AddHandler cgi-script .sh

これは、.shファイルをCGIスクリプトとして扱うようにWebサーバーに指示します。.shファイルのアクセス許可を755に変更することを忘れないでください。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.