2017-06-27 3 views
0

Ich habe eine portable Version von Apache und PHP7 auf Windows phpseclib1.0.7. Ich wollte die lib erweitern, um ssh zu nutzen. mit dem Lager-Skript von der Website zum TestenPHP SSH2: Maximale Ausführungszeit von 30 Sekunden überschritten

<?php 
include('Net/SSH2.php'); 

$ssh = new Net_SSH2('-Redacted-'); 
if (!$ssh->login('-Redacted-', '-Redacted-')) { 
    exit('Login Failed'); 
} 

echo $ssh->read('[email protected]:~$'); 
$ssh->write("sudo ls -la\n"); 
$output = $ssh->read('#[pP]assword[^:]*:|[email protected]:~\$#', 
NET_SSH2_READ_REGEX); 
echo $output; 
if (preg_match('#[pP]assword[^:]*:#', $output)) { 
    $ssh->write("password\n"); 
    echo $ssh->read('[email protected]:~$'); 
} 
?> 

Auch mit dem Mangel an Informationen sollte es einen Fehler aus, sondern es gibt mir

PHP Fatal error: Maximum execution time of 30 seconds exceeded in 
C:\Users\-Redacted-\Desktop\Apache2.2\htdocs\Net\SSH2.php on line 2358 

Hier wird die SSH2.php beginnend bei Zeile 2351

if (isset($this->keyboard_requests_responses)) { 
for ($i = 0; $i < $num_prompts; $i++) { 
if (strlen($response) < 4) { 
return false; 
} 
extract(unpack('Nlength', $this->_string_shift($response, 4))); 
// prompt - ie. "Password: "; must not be empty 
Line 2358---- $prompt = $this->_string_shift($response, $length); 
//$echo = $this->_string_shift($response) != chr(0); 
foreach ($this->keyboard_requests_responses as $key => $value) { 
if (substr($prompt, 0, strlen($key)) == $key) { 
$responses[] = $value; 
break; 
} 
} 
} 
} 

hat jemand irgendwelche Ideen, wie zu beheben?

+0

Können Sie den Remote-Host anpingen? – apokryfos

+0

sind Sie sicher, dass Ihr Server ssh open geöffnet ist? –

+0

Putty funktioniert gut mit Remote-Host. – MoonEater916

Antwort

0

Ich denke, dass Sie www.domain.tld nicht erreichen können, vor allem müssen Sie sicher sein, dass www.domain.tld von Ihrem System aus erreichbar ist. Sie können Ihren Code in einem Try-Catch-Block wickeln einen Fehler

<?php 
include('Net/SSH2.php'); 
try{ 
$ssh = new Net_SSH2('-redacted-'); 
if (!$ssh->login('-redacted-', '-redacted-')) { 
    exit('Login Failed'); 
     } 

echo $ssh->read('[email protected]:~$'); 
$ssh->write("sudo ls -la\n"); 
$output = $ssh->read('#[pP]assword[^:]*:|[email protected]:~\$#', 
NET_SSH2_READ_REGEX); 
echo $output; 
if (preg_match('#[pP]assword[^:]*:#', $output)) { 
    $ssh->write("password\n"); 
    echo $ssh->read('[email protected]:~$'); 
}catch(\Exception $ex){echo "You got an error".$ex->getMessage();} 
?> 

zu erhalten, wenn Ihr sicher sind, dass Host erreichbar ist Ihnen maximale timout wie folgt erweitern:

ini_set('max_execution_time', 300); 

, wenn Sie sicher sind, Wenn Ihr Host korrekt ist, können Sie überprüfen, ob der Host-SSH-Port geöffnet ist und korrekt funktioniert.

+0

Ich habe die Informationen generischen seit ich bin nicht erlaubt, die Verbindungsdetails herauszugeben. Ich kann den Wirt gut peitschen. – MoonEater916

+0

@ MoonEater916 - es würde interessant sein, die PuTTY Protokolle zu sehen - Sie können sie erhalten, indem Sie zu PuTTY gehen -> Sess ion -> Loggen und markieren Sie das Optionsfeld "SSH-Pakete". Dann verbinden Sie wie gewohnt. Ich habe eine Idee, was das Problem ist (was unter anderem beinhaltet, dass Sie sich mit dem falschen PW einloggen), aber die Logs würden helfen, dies zu bestätigen. – neubert

Verwandte Themen