LoginSignup
1
1

PHP:SSH接続できないレンタルサーバーでコマンドを実行する

Last updated at Posted at 2023-08-01

はじめに

自分が使用しているレンタルサーバーは「さくらのレンタルサーバのライトプラン」で、SSH接続ができない仕様となっています。
なんとかコマンド実行できないか調べたところ、PHPのexec関数を使えば可能だったので、手順についてまとめます。

さくらのレンタルサーバプラン比較
出典:プラン比較 - レンタルサーバーはさくらインターネット

環境

PHPがはいっていることが前提となります。

手順

  1. phpファイルを作成し、次のようなスクリプトを記述する($command変数に実行したいコマンドを記述する)

    <pre>
    
    <?php
    $command = 'php -v';
    exec($command . ' 2>&1', $output, $result);
    
    echo '実行したコマンド:' . $command . '<br>';
    echo '結果:' . $result . '<br>';
    print_r($output);
    ?>
    
    </pre>
    
  2. 作成したphpファイルをFTPなどを用いてレンタルサーバーへアップロードする

  3. ブラウザから、phpのファイルのパスを指定すると、コマンドが実行される
    php -v

    結果のあとの番号が0なら成功、0以外なら失敗しています。
    番号の内容についてはこちらを参考にしてください。
    Exit Codes With Special Meanings

具体例:Composerコマンドを実行する例

PHPのライブラリ管理ツール「Composer」を使ってライブラリをインストールしたいが、サーバーへSSH接続できない場合の方法です。

  1. Composerのサイトから、phpではじまる4行のスクリプトをコピーし、ローカル端末の任意のパスでコマンドを実行する

    php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
    php -r "if (hash_file('sha384', 'composer-setup.php') === 'e21205b207c3ff031906575712edab6f13eb0b361f2085f1f1237b7126d785e826a450292b6cfd1d64d92e6563bbde02') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;"
    php composer-setup.php
    php -r "unlink('composer-setup.php');"
    

    ※スクリプトは更新されるようなので、サイトから最新のスクリプトをコピーしたほうがよさそうです

  2. コマンドを実行したパスに「composer.phar」が作成されていることを確認する

  3. 作成した「composer.phar」をFTPなどを用いてサーバーの任意のフォルダーへアップロードする

  4. 次のスクリプトを記載したPHPファイルを作成し、サーバーの「composer.phar」と同じ階層へアップロードする

    <pre>
    
    <?php
    $command = 'export HOME="/root"; php composer.phar';
    exec($command . ' 2>&1', $output, $result);
    
    echo '実行したコマンド:' . $command . '<br>';
    echo '結果:' . $result . '<br>';
    print_r($output);
    ?>
    
    </pre>
    
  5. ブラウザから、phpのファイルのパスを指定すると、コマンドが実行される

  6. 「結果:0」が表示され、Composerのロゴが表示されていることを確認する
    実行結果

    この画面が返ってくれば、Composerコマンドが使用できる状態です

phpファイルの$commandの内容に、ライブラリを記載して実行すれば、ライブラリをインストールできます。

  • twitteroauthをインストールする例

    <pre>
    
    <?php
    $command = 'export HOME="/root"; php composer.phar require abraham/twitteroauth';
    exec($command . ' 2>&1', $output, $result);
    
    echo '実行したコマンド:' . $command . '<br>';
    echo '結果:' . $result . '<br>';
    print_r($output);
    ?>
    
    </pre>
    

「結果:0」が表示され、「composer.json」「composer.lock」ファイルと、「vendor」フォルダの中にabraham/twitteroauthのファイル群が作成されていればインストールは完了です。

おわりに

SSH接続できないレンタルサーバーで、Composerコマンドを使ったライブラリのインストール方法がわからず、かなりハマってしまいました。
が、結果的にはComposer経由でライブラリをインストールする必要はなかったので無駄作業になってしまいました。
供養の意味もこめて手順をまとめました。誰かの役に立ちますように…。

出典

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1