via PHP auf eine Shell zugreifen

nun hätte ich mal ne frage zu dem code ;)

PHP:
echo fread($pipes[0], 2096);

wieso genau 2096? hast du das einfach mal so angenommen, ist das bei verwendung von proc open oder bei bidirektionalen pipes irgendwie wichtig?
in der befehlübersicht wurde in diesem kontext 8192 angegeben....
nur mal so für meine private weiterbildung ;)
 
Arne: Eventuell habe ich mich etwas unklar ausgedrückt, aber gleich den Account zu sperren halte ich deshalb nicht für angebracht.

chibisuke: Ich habe es vorher mit proc_open() probiert, was allerdings genausowenig funktioniert hat, und da die Funktion proc_open() auf manchen Servern wegen einer zu alten PHP Version nicht unterstützt wird, habe ich es mit einer älteren Funktion versucht, mit welcher es genauso gehen sollte.

Mein Script mit proc_open() sieht so aus:

PHP:
<?php
$descriptorspec = array(
   0 => array("pipe", "r"),  
   1 => array("pipe", "w"), 
   2 => array("file", "/tmp/error.txt", "a") 
);
$process = proc_open("ssh -l root IP", $descriptorspec, $pipes);
if (is_resource($process)) {
   fwrite($pipes[0], "Passwort");
   fclose($pipes[0]);

   while(!feof($pipes[1])) {
       echo fgets($pipes[1])."<br>";
   }
   fclose($pipes[1]);
   $return_value = proc_close($process);

   echo "command returned $return_value\n";
}
?>

$return_value ist -1

Ben Ben: Es werden nur solange Daten ausgelesen bis 2096 Bytes ausgelesen wurden oder das Ende der Datei erreicht ist. Was du da nun einsetzt ist dir überlassen und hängt von deiner Anwendung ab. Es ist aber nicht zwingend notwendig genau 2096 Bytes bei proc_open() zu benutzen.
 
Zuletzt bearbeitet:
*sigh*

Kann es sein das dir entgangen is das SSH oftmals vor dem kennwort auch noch eingaben verlangt? z.B. will es manchmal das die übertragung des öffentlichen schlüssels bestätigt wird.

außerdem solltest du indem du die ausgaben von SSH prüfst erstmal feststellen ob die verbindung überhaupt besteht.

Mit unidirektionaler unterstützung kannst du nicht viel tun, denn SSH ist ein programm das interaktiv arbeitet und du musst ja auch prüfen ob die befehle richtig ausgeführt wurden.


2096 ist nur ein willkürlicher wert, und es ist die maximal zahl von byte die er aus der datei (in dem fall ein pipe). Wenn diese anzahl byte net verfügbar ist, dann endet der lesevorgang bei EOF, ich hätte auch nur 1000 oder auch 100000 hin schreiben können... im endeffekt kommts aufs gleiche raus....
 
chibisuke: Das ist mir durchaus bekannt, aber den Schlüssel will es nur bestätigt haben, sofern die IP noch nicht in der Liste der bekannten Hosts ist, was bei mir aber der Fall ist.

Und da per fread() keine Daten ausgegeben werden, müsste es doch heissen, dass auch keine vorhanden sind, was ja eigentlich nicht sein kann. Infolgedessen ist es mir auch schwer möglich irgendwelche Fehlerquellen zu finden. Kennst du das Problem eventuell?
 
wofür die byte anzahl steht wusste ich, wollte nur wissen ob dies willkürlich war oder einen bestimmten grund hatte... ;)
aber dennoch danke ;)
 
Original geschrieben von Johannes Schmitt
chibisuke: Das ist mir durchaus bekannt, aber den Schlüssel will es nur bestätigt haben, sofern die IP noch nicht in der Liste der bekannten Hosts ist, was bei mir aber der Fall ist.

Und da per fread() keine Daten ausgegeben werden, müsste es doch heissen, dass auch keine vorhanden sind, was ja eigentlich nicht sein kann. Infolgedessen ist es mir auch schwer möglich irgendwelche Fehlerquellen zu finden. Kennst du das Problem eventuell?


hmm das is nicht gut. kann es sein das er das SSH programm nicht findet? versuch doch mal den alsoluten pfad anzugeben...

außerdem mach bitte mal oben ein
error_reporting(E_ALL);
vieleicht ergibt das ja irgendwas.
 
Ich habe jetzt eine Fehlermeldung:

16582: Pseudo-terminal will not be allocated because stdin is not a terminal. 16582: Permission denied, please try again. 16582: Permission denied, please try again. 16582: Permission denied (publickey,password,keyboard-interactive).

Ich hoffe du kannst damit was anfangen, weil ich weiss nicht was an der stdin Pipe falsch sein soll.
 
Tja die fehlermeldung sagt nur das er dir den zugriff verweigert...

und das liegt vermutlich daran das du keinen root zugriff hast mit PHP

versuch doch mal

su -c "ssh -l root IP"

als komando, und übergieb ihm als erstes an das stdin pipe das root kennwort, des servers auf dem PHP leuft.
 
Wenn ichs mit dem Befehle versuche, ist der Fehler: Password: su: incorrect password

Wenn ich genau den gleichen Befehle mit genau demgleichen Passwort aber per Hand auf der Shell ausführe, kommt kein Fehler.
 
das is aber net gut... sollte eigendlich schon funktionieren...
geht hier einwandfrei...

sonst stell die berechtigung für SSH so das der PHP user es benutzen darf...

oder du versuchst es mit sudo, bedenke das du dazu den php user in mit visudo in die konfigoration einfügen musst.
 
Zuletzt bearbeitet:

Neue Beiträge

Zurück