T

PHPでssh

前に書いたけれど、PHPとlibssh2の間をとりもってくれるPECLssh2の使い方でいろいろわかったことがあるので追記。

リモートでコマンドを実行する際に、リモート側のレスポンスが遅いとストリームが途切れてしまい、意図せざる結果になることがあるので、ブロックモードで実行するとよい。

<?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");
}

?>

これだと、戻りが遅いコマンドを実行してもじっと我慢して待っていてくれる。

Posted by on 8月 15, 2007 in Linux, PHP

コメントを残す