Mit PHP muss ich regelmäßig einen Remote-Befehl auf einem Draytek 2925 Router mit SSH ausführen.php - ssh2_exec fehlgeschlagen Zuordnung pty
Ich kann bereits eine Verbindung zum Router mit dem Standard-Befehl "ssh" unter Linux, aber nach der Authentifizierung bekomme ich "PTY-Zuweisung Anfrage auf Kanal 0 fehlgeschlagen". Trotz dieser Nachricht kann ich trotzdem Befehle senden.
Wenn ich versuche, das gleiche mit PHP zu tun, bekomme ich 1 von 2 Ergebnissen, von denen keines die Ergebnisse liefert, die ich brauche.
Mein Code ist wie folgt:
<?
if (!($connection = ssh2_connect('my.router.local', 22)))
die('CONN');
else if (!ssh2_auth_password($connection, 'admin', 'password'))
die('AUTH');
else
{
$stream = ssh2_exec($connection, 'sys version');
stream_set_blocking($stream, true);
$stream_out = ssh2_fetch_stream($stream, SSH2_STREAM_STDIO);
echo stream_get_contents($stream_out);
exit();
}
?>
Die PHP versagt bei ssh2_exec(). Wenn ich das dritte Argument (pty) angeben, erhalte ich dieses Ergebnis:
Warning: ssh2_exec(): Failed allocating 1 pty at 80x25 characters
jedoch nicht die dritte Argument Ergebnisse bei der Angabe:
Warning: ssh2_exec(): Unable to request command execution on remote host
Auch wenn ich @ ssh2_exec Typ(), I don Ich bekomme keine Warnung, aber ich bekomme auch kein Ergebnis.
Wenn PHP ein No-Go ist, habe ich versucht, sshpass in der gleichen Art und Weise verwenden, aber das ergibt sich folgende:
# sshpass -f sshpwd -v ssh [email protected] 'sys version'
SSHPASS searching for password prompt using match "assword"
SSHPASS read: [email protected]'s password:
SSHPASS detected prompt. Sending password.
SSHPASS read:
exec request failed on channel 0
#
ich schließlich müssen nur authentifizieren, einen Befehl und geben das Ergebnis zu senden. Gibt es irgendetwas, was ich falsch mache oder gibt es einen einfacheren Weg?