PHPでssh
Linux, PHP August 15th, 2007
前に書いたけれど、PHPとlibssh2の間をとりもってくれるPECLのssh2の使い方でいろいろわかったことがあるので追記。
リモートでコマンドを実行する際に、リモート側のレスポンスが遅いとストリームが途切れてしまい、意図せざる結果になることがあるので、ブロックモードで実行するとよい。
<?php
$server = 'example.com';
$user = 'user';
$pass = 'pass';
$cmd = 'grep "avalanche" /home/user/procmail.log';
if($connection = ssh2_connect($server, 22)){
if(ssh2_auth_password($connection, $user, $pass)){
if($stream = ssh2_exec($connection, $cmd)){
stream_set_blocking($stream, 1);
if($content = stream_get_contents($stream)){
print($content . "\n");
}else{
die("データストリームからデータを取得できません。\\n");
}
}else{
die("コマンドが実行できませんでした。\\n");
}
}else{
die("認証に失敗しました。\\n");
}
}else{
die("接続に失敗しました。\\n");
}
?>
これだと、戻りが遅いコマンドを実行してもじっと我慢して待っていてくれる。