In attesa di command per terminare l'utilizzo di SSH2_Shell in PHP

Ho una session SSH2_Shell che funziona in PHP. il mio problema è che ho bisogno di un command per finire completamente prima di passare al command successivo. Ecco il mio codice finora:

$command_capture = "cd /mnt/NADS/scripts/"; $command_capture2 = "./tcpdump.sh $capture_name $sleep"; if (!($connection = ssh2_connect("172.20.1.18", 22))) { echo "fail: unable to establish connection"; } if (!ssh2_auth_password($connection, "root", "Hideandseek")) { echo "fail: unable to authenticate"; } $stream = ssh2_shell($connection); fwrite($stream, $command_capture. PHP_EOL); sleep(1); fwrite($stream, $command_capture2 . PHP_EOL); sleep(5); $data=""; while($buf = stream_get_contents($stream)){ $data.=$buf; } echo $data; fclose($stream); 

lo script tcpdump.sh sta eseguendo un command lftp, ma non viene dato abbastanza tempo per essere completato. Non posso usare il sonno poiché potrebbe richiedere più tempo rispetto al tempo specificato e non voglio che l'utente attenda se ha bisogno solo di pochi secondi. Non ho avuto fortuna nell'implementare stream_set_blocking come quando lo faccio, sembra che blocchi il mio browser.

nel complesso, ho bisogno di un modo per rilevare quando un command è finito e passare al command successivo.

Grazie in anticipo!

Grazie per le idee, ma penso di averlo risolto. Ho fatto eco ad alcuni caratteri speciali quando il command è finito e quindi avrei cercato i caratteri usando strpos (). Un'altra cosa che penso possa aver aiutato è stata la regolazione dell'impostazione max_execution_time nel file php.ini. Ho trovato questa risposta qui:

http://verysimple.com/2006/03/30/fatal-error-maximum-execution-time-of-30-seconds-exceeded/

Ed ecco il mio nuovo codice

  $data=""; while (true){ $data .= stream_get_contents($stream); if (strpos($data,"XOXO") !== false) { echo "okay: command finished\n"; break; } } echo $data; fclose($stream); 

Ho una class SSH2 che implementa Secure Shell2 su github. Consulta https://github.com/bubba-h57/PHP-SSH2 e controlla se questo è d'aiuto.

Continuo a cercare un modo migliore per gestire la ricerca dei prompt, quindi qualsiasi consiglio o contributo sarebbe ben accetto. Spero che ti aiuti, se non altro che darti qualche idea.

È ansible utilizzare phpseclib, una pura implementazione SSH PHP . per esempio.

 <?php include('Net/SSH2.php'); $ssh = new Net_SSH2(); $ssh->login('username', 'password'); echo $ssh->exec('command'); echo $ssh->exec('command2'); ?> 

Se hai davvero bisogno del supporto della shell, puoi fare quanto segue (con l'ultimo SVN):

 <?php include('Net/SSH2.php'); $ssh = new Net_SSH2(); $ssh->login('username', 'password'); $ssh->read('[prompt]'); $ssh->write("command\n"); echo $ssh->read('[prompt]'); $ssh->write("command\n"); echo $ssh->read('[prompt]'); ?>