[php] SSH nie wykonuje poleceń...

0

Witam!

Chciałem sprawdzić czy mój serwer posiada możliwość połączeń konsolowych, znalazłem skrypt który to sprawdza...lekko go zmodyfikowałem aby "wypuścił" dane z terminala:

 <?
if (!function_exists("ssh2_connect")) die("function ssh2_connect doesn't exist");
// log in at server1.example.com on port 22
if (!($con = ssh2_connect("localhost", 22))){
    echo "fail: unable to establish connection<br>";
} else {
    // try to authenticate with username root, password secretpassword
 if(!ssh2_auth_password($con, "root", "niepodam")) {
        echo "fail: unable to authenticate<br>";
    } else {
        // allright, we're in!
        echo "okay: logged in...<br>";
 
        // create a shell
        if (!($shell = ssh2_shell($con, 'xterm', null, 80, 40, SSH2_TERM_UNIT_CHARS))) {
            echo "fail: unable to establish shell<br>";
        } else {
            stream_set_blocking($shell, true);
			
			// send a command
            fwrite($shell, "ls -al\n");
            sleep(1);

			// & collect returning data
            $data = "";
            while ($buf = fread($shell,4096)) {
                $data .= $buf;
				echo $data."<br>";
            }
            fclose($shell);
        }
    }
}
?>

jednak dostaję tylko

okay: logged in...<br> Linux d131 2.6.33-2-amd64 #1 SMP Thu Mar 18 12:53:58 UTC 2010 x86_64 Last login: Tue Jan 4 13:36:36 2011 from localhost 

bez wyjścia zwróconego przez polecenie... co może być przyczyną?

ps. Co ciekawe próbowałem połączyć się przez putty z tym hostem lecz nieodpowiada - ktoś może zna przyczynę?

Pozdrawiam

1

z $shell odczytujesz 4096 bajtów - skąd pewność, że odpowiedź będzie miała taką długość? Wg. dokumentacji (http://pl.php.net/fread) powinieneś raczej odczytać odpowiedź mniej więcej tak

$uchwyt = fopen("http://www.przykladowy.com/", "rb");
$tresc = '';
while (!feof($uchwyt)) {
  $tresc .= fread($uchwyt, 8192);
}
fclose($uchwyt);

//edit:
możesz też spróbować z

stream_get_contents($shell);
0
   while ($buf = fread($shell,4096)) {

więc wykonuje się dopóki fread nie zwróci false, więc jeśli będzie więcej niż 4096b to i tak powinno odczytać... co do get_contents też nie daje rady...

0

próbowałem także w ten sposób, ale też bez rezultatu...być może coś po stronie serwera jest nie tak...

1 użytkowników online, w tym zalogowanych: 0, gości: 1