SSH-Verbindung mit PHP funktioniert (teilweise) nicht..
Hallo zusammen,
zunächst habe ich folgendes vor:
Ich möchte über PHP/SSH zwei WLAN-Access-Points ansteuern und auf diesen SSH-Befehle ausführen (z.B. zum Ein/Ausschalten einer SSID). Ich habe einen Debian-Server (6.0) mit Apache2/PHP5 und libssh2 installiert.
Wenn ich auf den eigenen Server über SSH zugreife (über das PHP-Script), dann funktioniert es tadellos. Wenn ich jedoch den Access-Point ansteuern möchte, lädt die Seite ewig und es tut sich nichts...
Hier der Code des PHP-Script's:
Die Verbindung über PUTTY zum AccessPoint (bzw. zu beiden Access-Points) geht einwandfrei - nur leider nicht über das Script ;-(
Ich vermute den Fehler fast nicht direkt bei dem Script, sondern eher bei SSH..
Vielen Dank schon mal für Eure Hilfe!
zunächst habe ich folgendes vor:
Ich möchte über PHP/SSH zwei WLAN-Access-Points ansteuern und auf diesen SSH-Befehle ausführen (z.B. zum Ein/Ausschalten einer SSID). Ich habe einen Debian-Server (6.0) mit Apache2/PHP5 und libssh2 installiert.
Wenn ich auf den eigenen Server über SSH zugreife (über das PHP-Script), dann funktioniert es tadellos. Wenn ich jedoch den Access-Point ansteuern möchte, lädt die Seite ewig und es tut sich nichts...
Hier der Code des PHP-Script's:
<?php
// Bitte aendern passen Sie die folgenden Variablen an:
$server['ip'] = "172.22.31.149"; // IP des Servers
$server['sshport'] = 22; // SSH Port (Standart: 22)
$server['user'] = "admin"; // Benutzername
$server['pw'] = "admin"; // Passwort des Benutzers
$command = "get ssid"; // Dieser Befehl wird auf dem SSH Server ausgeführt!
// ab hier wenn möglich nichts mehr veraendern
if($ssh = ssh2_connect($server['ip'], $server['sshport'] ))
{
if(ssh2_auth_password($ssh, $server['user'], $server['pw']))
{
echo("Verbindung und Anmeldung erfolgreich!<br /><br />");
$stream = ssh2_exec($ssh, $command);
stream_set_blocking($stream, true);
$data = '';
while($buffer = fread($stream, 4096))
{
$data .= $buffer;
}
fclose($stream);
print $data;
}
else
{
echo "Fehler: Es konnte keine Verbindung zum ausgewählten Server hergestellt werden. Benutzername oder Passwort falsch.";
}
}
else
{
echo "Fehler: Es konnte keine Verbindung zum ausgewählten Server hergestellt werden. Server-IP oder SSH Port falsch.";
}
?>
Die Verbindung über PUTTY zum AccessPoint (bzw. zu beiden Access-Points) geht einwandfrei - nur leider nicht über das Script ;-(
Ich vermute den Fehler fast nicht direkt bei dem Script, sondern eher bei SSH..
Vielen Dank schon mal für Eure Hilfe!
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 258575
Url: https://administrator.de/contentid/258575
Ausgedruckt am: 08.11.2024 um 00:11 Uhr
16 Kommentare
Neuester Kommentar
Hallo thaddaeus93,
versuch mal bei ssh_connect die entsprechenden Methoden für den
Schlüsselaustausch explizit mitzugeben:
http://php.net/manual/de/function.ssh2-connect.php
Die für deinen angesprochenen Accesspoint ausgehandelten Parameter kannst du ja im Connection-Status der Putty-Verbindung ablesen. Eventuell unterstützen die APs hier nur Protokolle die libssh2 nicht unterstützt, oder es gibt da ein Kompatibilitätsproblem.
Um was für APs handelt es sich denn überhaupt ?
Und auch mal das ErrorReporting von PHP im Script aktivieren.
Wenn's ganz hart kommt auch mal Wireshark auf dem Debian mitlaufen lassen.
Grüße Uwe
versuch mal bei ssh_connect die entsprechenden Methoden für den
Schlüsselaustausch explizit mitzugeben:
http://php.net/manual/de/function.ssh2-connect.php
Die für deinen angesprochenen Accesspoint ausgehandelten Parameter kannst du ja im Connection-Status der Putty-Verbindung ablesen. Eventuell unterstützen die APs hier nur Protokolle die libssh2 nicht unterstützt, oder es gibt da ein Kompatibilitätsproblem.
Um was für APs handelt es sich denn überhaupt ?
Und auch mal das ErrorReporting von PHP im Script aktivieren.
error_reporting(E_ALL);
Wenn's ganz hart kommt auch mal Wireshark auf dem Debian mitlaufen lassen.
Grüße Uwe
Noch zur Info: Folgende pur in PHP geschriebene SSH Bibliothek könnte was für dich sein:
http://phpseclib.sourceforge.net/
Mit der Bibliothek hatte ich hier bisher keinerlei Probleme. Und der unschlagbare Vorteil, du benötigst keinerlei Modul für den Apache, das Einbinden der PHP-Datei genügt.
http://phpseclib.sourceforge.net/
Mit der Bibliothek hatte ich hier bisher keinerlei Probleme. Und der unschlagbare Vorteil, du benötigst keinerlei Modul für den Apache, das Einbinden der PHP-Datei genügt.
Sobald ich mehrfach versuche, über das nicht funktionierende PHP-Script eine Verbindung zum AP aufzubauen, "blockiert" der Access-Point. Ich komme dann nichtmal mehr über PUTTY auf den AP ("Connection refused").
Das wird dann die Firewall bzw. ein Sicherheitsmechanissmus des APs sein, oder die maximale Anzahl an offenen nicht geschlossen Sessions ist erreicht, dann blockt der jeden weiteren Verbindungsversuch bis die halb offenen Sessions durch ein Timeout geschlossen werden.Um welche APs handelt es sich wenn man zum zweiten mal Fragen darf ?
Zitat von @thaddaeus93:
Ein Cisco-Switch (SG300 28p) habe ich auch noch zum testen - hier verhält es sich aber genauso, wie bei den Access-Points...
Das hört sich jetzt aber eher nach einer fehlerhaft konfigurierten Firewall auf dem Debian-System an wenn du nur mit dem lokal laufenden SSH-Daemon connecten kannst und mit sonst keinem anderen SSH-Server.Ein Cisco-Switch (SG300 28p) habe ich auch noch zum testen - hier verhält es sich aber genauso, wie bei den Access-Points...
Also Firewall erst mal komplett ausschalten, und mal eine andere Kiste mit einem Testlinux mit SSH aufsetzen mit dem du dich verbindest.
Sind irgendwelche anderen Devices/Switches/Firewalls zwischen dem Debian-System und den APs die Einfluss auf die Verbindung haben könnten ?
Und hast du schon mal mit
fsockopen()
versucht dich auf Port 22 zu verbinden ?Wenn das nämlich nicht klappt hast du ein Netzwerkproblem!
Dann häng mal an die Befehle einen Zeilenumbruch an \n eventuell hängt ja nur die Befehlszeile und wartet auf einen zusätzlichen Return - normalerweise sollte das ja die Bibliothek automatisch machen, aber probieren kann man es ja mal.
Ansonsten wie gesagt Wireshark ...der sollte Licht ins Dunkel bringen.
Eine erfolgreiche SSH2-Verbindung sieh da bspw. folgendermaßen aus:
Ansonsten wie gesagt Wireshark ...der sollte Licht ins Dunkel bringen.
Eine erfolgreiche SSH2-Verbindung sieh da bspw. folgendermaßen aus:
Schon den den Output-Buffer "geflusht"
http://stackoverflow.com/questions/23409125/phpseclib-real-time-output- ...
Scheint als wäre der Befehl den du absetzt das Hauptproblem, der scheint sich nicht richtig zu beenden.
http://stackoverflow.com/questions/23409125/phpseclib-real-time-output- ...
Scheint als wäre der Befehl den du absetzt das Hauptproblem, der scheint sich nicht richtig zu beenden.