サーバーでのコマンド実行(リモートsh未使用)

便利ツール

サーバーでコマンドを使用したくなる時があります。自分が使用したくなるケースとして、例えば以下のような場合。

  1. cronの実行ファイルを試験的に実行したい
  2. サーバー側でzip,unzipしたい(展開してからFTPすると時間がかかるので)

しかし、契約内容あるいはサーバー側のサービスによってコマンドラインが使用できない場合がある。そこで、簡易的にコマンドを実行できるPHPを記載してみました。使用には若干癖がありますが、ご容赦の程。

プログラムの構造

本プログラムはこの前に投稿した以下が基本となっています。

下記構造において()内のファイルは同一であるので、上記投稿を参照してください。

では、早速プログラムの説明に入ります。

tools下

login後のsuccess.phpを以下に掲載する。参考にしたプログラムとほとんど変更はないんですが、コマンドを実行するphpとして、herfでdoexec.phpを呼び出すよう変更しております。

 

次にメインとなるコマンドを実行するPHPであるdoexec.phpです。

 

いくつかポイントを記載しておきます。

phpコマンドのパスを追加
私の使用しているサーバーだけかもしれないですが、phpのパスが入っておらず、phpが実行できないため、以下でPATHに追加しております。
$phppath = “export PATH=\$PATH:(phpのパス)”
このPHPのPATHですが、以下でphpコマンドの所在を推定して設定しております。
(1)phpinfo.phpファイルを作る

(2)アップロードする

(3)アップロードしたphpinfo.phpファイルをhttp経由でアクセスする。

すると、php関連の情報が色々と出てきます。そして、下記部分を参考とし、右セルの etc を bin に書き換えてpathに加えています。

Configuration File (php.ini) Path /usr/local/php/(phpのバージョン)/etc
以下のような感じになります。
$phppath = “export PATH=\$PATH:/usr/local/php/(phpのバージョン)/bin
これで、phpの実行が可能となりました。
リロード対策を含めて、毎回数値を初期化
doexec.phpはコマンドを実行されるたびに呼び出されます。そこで、例えば前日に実施した内容がPOST変数に残ってしまいます。対応の方法は種々あるようですが、ここでは単純に毎回すべての変数を初期化して、その後必要に合わせて上書きとしております。
前回実行のコマンドを残せるようにした
こちらはラジオボタンで実装しました。「残す」を選択すると前回実行のコマンドが残せるように工夫しており、コマンドを修正しながら実行したい場合などに便利かと思います。
ところで、h_toolsのパーミッションは「オーナーのみ」に入れてください。外部から見えないようにするためです。こちらも詳しくは前記事をご参照ください。
では実際に動かしてみたいと思います。

コマンドの実行

index.phpをアクセスして、un_pw.phpで設定したユーザー名とパスワードを入力すると以下のような画面が出てくるので、赤矢印の「コマンド実行画面に進む」をクリック。

コマンド実行画面は以下。「コマンドを入力してください」の下のBOXにコマンドを入力。履歴は残すのか残さないのかどちらかをクリック。

下の図が ls ––help を実行した際の画面となる。実行コマンドと、その下に実行結果が表示されるる。

実行結果は下部に出てくるが、続けてBOXにコマンドを打ち込めば、再度コマンドが実行されることになります。

 

ところで、留意点がいくつかあります。まずは cd です。カレントディレクトリ(実行しているディレクトリあるいはフォルダ)を記憶しておりません。あくまで、doexec.phpを配置したフォルダが毎回基本となります。そこで、例えば一つ上でコマンド ls を実行したいとすれば、

cd .. ; ls

と一度に2つのコマンドを打つことになります。

それと、cd だがルートを経由するとNGになるようです。例えば doexec.php が /abc/ にあり、 /def で ls のコマンドを実行したいとすると以下はNGとなり、実行できな旨の表示がなされます。

cd ../def ; ls

これは一度ルートのさらに一階層上(=アクセス許可がない)にまでアクセスが必要だから考えられます。以下のようにして、アクセスすると問題なく実行できます。

cd .. ; cd def ; ls

 

もう一つ、phpのファイルを実行するときは、以下のようにphpを先頭に付けて実施してください。

php phpファイル名

これで、phpファイルが実行されます。

コマンド実行の説明は以上になります。終わるときは、実行画面最下部の「ログインページへ」を押して、「ログアウト」すればおしまいとなりす。

最後に

ここまで読んでいただいてありがとうございました。実装に少し時間がかかるかもしれないが、一度実装しておけば、今後の作業が楽になるのではと思います。使用していただければ幸いです。

タイトルとURLをコピーしました