PECLのssh2モジュールを使うと、PHPでも簡単にリモートサーバを直接操作することができるっぽいので、セキュリティうんぬんはさておき、試してみた。
まずは、libssh2 のインストール。
# wget http://nchc.dl.sourceforge.net/sourceforge/libssh2/libssh2-0.17.tar.gz # tar xvfz libssh2-0.17 # cd libssh2-0.17 # ./configure --prefix=/usr/local/ # make all install
続いて、ssh2モジュールをソースから導入。
# wget http://pecl.php.net/get/ssh2-0.10.tgz # tar xvfz ssh2-0.10 # cd ssh2-0.10 # /usr/local/bin/phpize # ./configure --with-ssh2=/usr/local/lib # make
ここで、ひたすらmakeに失敗して焦る。原因は、すでに入っていた古いlibssh2を参照していたため。--with-ssh2でパスを指定したら、うまくいきました。ほっ。
ソースディレクトリ配下のmodulesの下に、ssh2.soができるので、これをphp.iniのextension_dirで指定したディレクトリにコピー。続けて、php.iniでextensionに追加する。
php.ini
; Directory in which the loadable extensions (modules) reside. extension_dir = "/usr/local/lib/php/extensions/"
extension=ssh2.so
ssh2.soをコピー。
# cp /usr/local/src/ssh2-0.10/modules/ssh2.so "/usr/local/lib/php/extensions/
ここまでできたら、apacheを再起動。うまくインストールできていれば、phpinfoでssh2の項目がでてくる。
簡単な使い方。
$con = @ssh2_connect("server_name", 22); ssh2_auth_password($con, 'user', 'password'); $stream = ssh2_exec($con, "ls -al | wc -l"); stream_set_blocking($stream, true); echo fread($stream, 4096); fclose($stream);
結果。
12
ファイル削除など、出力のないコマンドの実行結果をとるなら、こんな感じかな?
$con = @ssh2_connect("server_name", 22); ssh2_auth_password($con, 'user', 'password'); $stream = ssh2_exec($con, "rm -rf /tmp/hoge; echo $?"); stream_set_blocking($stream, true); echo fread($stream, 4096); fclose($stream);
結果。
0
まあ、実際に使うことは無さそうだけど、PHPだとこういうことも簡単にできるんだなーということで、ひとり満足。もはや独自プロトコルの対応以外では、自分でソケット操作とか面倒でしてられないもん。
お疲れさまでした。