Brett vorm Kopf - shell_exec
Brett vorm Kopf - shell_exec
am 17.09.2006 18:16:24 von Dirk Paschel
Hallo!
Ich verstehe das nicht:
Das läuft nicht:
$cmd = "/bin/plink ... -m " . $Datei . " >" . $Log ;
$aktion = `$cmd`;
echo $cmd;
echo $aktion;
$aktion ist leer und $cmd ist korrekt!
Der Zielserver sagt:
Sep 17 17:53:11 zielserver dropbear[25968]: Child connection from
12.34.56.78:35697
Sep 17 17:53:12 zielserver dropbear[25968]: exit before auth: error reading:
Connection reset by peer
Das läuft:
$cmd = "cat /etc/hosts";
$aktion = `$cmd`;
Der Befehl aus dem oberen Beispiel läuft, wenn er direkt an der Console
eingegeben wird.
plink und cat haben in /bin die selben Rechte.
plink ist ein kleiner ssh-Klient.
Danke!
Re: Brett vorm Kopf - shell_exec
am 17.09.2006 19:24:31 von Bernhard Jaud
Dirk Paschel schrieb:
> Hallo!
Hi!
> Ich verstehe das nicht:
> Das läuft nicht:
> $cmd = "/bin/plink ... -m " . $Datei . " >" . $Log ;
> $aktion = `$cmd`;
> echo $cmd;
> echo $aktion;
>
> $aktion ist leer und $cmd ist korrekt!
$aktion ist leer? Wie darf ich das verstehn?
Ausserdem scheind dein $cmd nicht komplett zu sein, was steht bei ...?
Du kannst Passwörter durch xxxx ersetzen aber wir brauchen schon ganze
angaben ;-)
>
> Der Zielserver sagt:
>
> Sep 17 17:53:11 zielserver dropbear[25968]: Child connection from
> 12.34.56.78:35697
> Sep 17 17:53:12 zielserver dropbear[25968]: exit before auth: error reading:
> Connection reset by peer
Was sagt dein Server?
Auch wäre der ganze Ausschnitt aus dem "echten" Script nett. Ohne dir
nahe treten zu wollen, aber manchmal übersieht man Tippfehler :)
--
Some humans would do anything to see if it is possible to do it.
If you would place a lager switch in some cave somewhere,
saying "END-OF-THE-WORLD-SWITCH!! DO NOT TOUCH!!!",
the paint wouldnt have time to dry.
-Terry Pratchett
Re: Brett vorm Kopf - shell_exec
am 17.09.2006 20:10:25 von Dirk Paschel
Hi!
>> $aktion ist leer und $cmd ist korrekt!
> $aktion ist leer? Wie darf ich das verstehn?
echo "
" . $aktion;
gibt
aus
> Ausserdem scheind dein $cmd nicht komplett zu sein, was steht bei ...?
// Schreibe KommandoDatei in sms_temp
srand ((double)microtime()*1000000);
$RAND = rand(10000,99999);
$Pfad = "/srv/www/httpdocs/";
$Datei = $Pfad . "sms_temp/" . $knnr . "-" . $RAND . ".cmd";
$Log = $Pfad . "sms_temp/" . $knnr . "-" . $RAND . ".log";
// Beispiel: 'yaps 01795674534 "Hallo Dirk!"'
$ToDo = "yaps " . $nummer . " \"" . $text . "\"\n";
$fp = fopen($Datei, 'w+');
fputs($fp, $ToDo);
fclose($fp);
// Führe SMS-Versand aus
// Beispiel: 'plink -ssh -2 -v -P 22 -l rupps -pw XXXXX 98.76.54.43 -m
/root/sms.txt'
// Das klappt noch nichr!!
$cmd = "/bin/plink -ssh -2 -v -P 22 -l rupps -pw XXXXX 98.76.54.43 -m " .
$Datei . " >" . $Log ;
// $cmd = "cat /etc/hosts";
$aktion = `$cmd`;
>
> Du kannst Passwörter durch xxxx ersetzen aber wir brauchen schon ganze
> angaben ;-)
>
>>
>> Der Zielserver sagt:
>>
>> Sep 17 17:53:11 zielserver dropbear[25968]: Child connection from
>> 12.34.56.78:35697
>> Sep 17 17:53:12 zielserver dropbear[25968]: exit before auth: error
>> reading: Connection reset by peer
>
> Was sagt dein Server?
Nix
>
>
> Auch wäre der ganze Ausschnitt aus dem "echten" Script nett. Ohne dir nahe
> treten zu wollen, aber manchmal übersieht man Tippfehler :)
>
Mhmm, der output von
echo "
" . $cmd;
im Browser auf die Console geschmissen, läuft ohne Probleme.
Re: Brett vorm Kopf - shell_exec
am 17.09.2006 21:10:31 von Claus Reibenstein
Dirk Paschel schrieb:
> Das läuft nicht:
Was heißt "läuft nicht"? Bekommst Du eine Fehlermeldung? Stimmen die
Ergebnisse nicht?
> $cmd = "/bin/plink ... -m " . $Datei . " >" . $Log ;
> $aktion = `$cmd`;
> echo $cmd;
> echo $aktion;
>
> $aktion ist leer und $cmd ist korrekt!
Wenn $cmd korrekt ist, ist doch alles in Ordnung. Oder nicht? Was steht
denn in dem Log-File anschließend drin? Nicht das, was Du erwartet hast?
Was hast Du denn erwartet?
> Das läuft:
>
> $cmd = "cat /etc/hosts";
> $aktion = `$cmd`;
Was meinst Du mit "Das läuft"?
Irgendwie verstehe ich Dein Problem nicht.
Re: Brett vorm Kopf - shell_exec
am 17.09.2006 21:41:42 von Bernhard Jaud
Dirk Paschel schrieb:
> Hi!
>
>
>>> $aktion ist leer und $cmd ist korrekt!
>> $aktion ist leer? Wie darf ich das verstehn?
>
> echo "
" . $aktion;
>
> gibt
>
>
>
> aus
>
Nun, mag sein das ich jetzt ziemlich doof klinge aber liegt da eventuell
der fehler?
$aktion sollte doch gleich $cmd sein.
und mit den ` ` wirds nicht funktionieren.
wenn dann
$aktion="`$cmd`"; (wenn du die ` zu $cmd hinzufügen willst);
>
> Mhmm, der output von
> echo "
" . $cmd;
>
> im Browser auf die Console geschmissen, läuft ohne Probleme.
Naja das is aber kein Maßstab.
mach mal echo shell_exec($cmd) und sag uns den output...
--
Some humans would do anything to see if it is possible to do it.
If you would place a lager switch in some cave somewhere,
saying "END-OF-THE-WORLD-SWITCH!! DO NOT TOUCH!!!",
the paint wouldnt have time to dry.
-Terry Pratchett
Re: Brett vorm Kopf - shell_exec
am 17.09.2006 21:52:42 von Ulf Kadner
Bernhard Jaud wrote:
> Nun, mag sein das ich jetzt ziemlich doof klinge aber liegt da eventuell
> der fehler?
>
> $aktion sollte doch gleich $cmd sein.
Wie kommst Du auf derartig falsche Annahmen?
> und mit den ` ` wirds nicht funktionieren.
Warum sollen Backtick-Operatoren nicht funktionieren?
Schau doch einfach ins Manual zu obigen Stichwort.
MfG, Ulf
Re: Brett vorm Kopf - shell_exec
am 17.09.2006 21:52:48 von Dirk Paschel
Hi!
>
> mach mal echo shell_exec($cmd) und sag uns den output...
$aktion = shell_exec($cmd);
echo "
" . $aktion;
Output:
Das plink wird ja ausgeführt, da am Zielrechner der sshd angesprochen wird.
Aber
dropbear[27576]: exit before auth: error reading: Connection reset by peer
erfolgt
Dort hätte aber
password auth succeeded for 'root'
zu finden sein.
Re: Brett vorm Kopf - shell_exec
am 17.09.2006 21:57:02 von Ulf Kadner
Dirk Paschel wrote:
> $cmd = "/bin/plink ... -m " . $Datei . " >" . $Log ;
> $aktion = `$cmd`;
> echo $cmd;
> echo $aktion;
>
> $aktion ist leer und $cmd ist korrekt!
Nur so als Iddee!
Es gibt Anwendungen die Ihren Output nicht auf stdout schreiben.
Mach mal am Ende des kommandos ein ' > whatever.txt' dran und schau mal
ob in die angegebene Datei der output geschrieben wird. Aber schreib die
Datei bitte in ein Verzeichnis in dem PHP schreibrechte hat. ;-)
Wenn dort alles OK ist informiere Dich wie Du auf Deinem OS den Output
entsprechend umleiten kannst.
MfG, Ulf
Re: Brett vorm Kopf - shell_exec
am 17.09.2006 22:00:02 von Bernhard Jaud
Ulf Kadner schrieb:
> Bernhard Jaud wrote:
>
>> Nun, mag sein das ich jetzt ziemlich doof klinge aber liegt da
>> eventuell der fehler?
>>
>> $aktion sollte doch gleich $cmd sein.
>
> Wie kommst Du auf derartig falsche Annahmen?
Ich habs grade gemerkt... :(
Ich hab vorher nochnie vom Backtick-Operator gehört... sry
Ok info gespeichert...
Ok ich geh jetzt davon aus das Safemode off is.
Nun fällt mir ausser
$cmd=escapeshellcmd($cmd);
nichts mehr ein.
--
Some humans would do anything to see if it is possible to do it.
If you would place a lager switch in some cave somewhere,
saying "END-OF-THE-WORLD-SWITCH!! DO NOT TOUCH!!!",
the paint wouldnt have time to dry.
-Terry Pratchett
Re: Brett vorm Kopf - shell_exec
am 17.09.2006 22:14:49 von Bernhard Jaud
Dirk Paschel schrieb:
>
> dropbear[27576]: exit before auth: error reading: Connection reset by peer
>
> erfolgt
>
>
>
> Dort hätte aber
>
> password auth succeeded for 'root'
>
>
> zu finden sein.
>
>
Ich glaub ich weiß es jetzt...
Vermutlich wird nachdem php die scriptausfürung beendet hat auch die
Connection terminiert.. wie wenn du dich aus der shell ausloggst und
deinen Prozessen der sighup gesendet wird.
mach mal
$cmd = "nohup /bin/plink -ssh -2 -v -P 22 -l rupps -pw XXXXX
98.76.54.43 -m " .
$Datei . " >" . $Log ." &";
--
Some humans would do anything to see if it is possible to do it.
If you would place a lager switch in some cave somewhere,
saying "END-OF-THE-WORLD-SWITCH!! DO NOT TOUCH!!!",
the paint wouldnt have time to dry.
-Terry Pratchett
Re: Brett vorm Kopf - shell_exec
am 17.09.2006 22:23:48 von Dirk Paschel
> Ok ich geh jetzt davon aus das Safemode off is.
$cmd = "cat /etc/hosts";
$aktion = `$cmd`;
Erzeugt den erwünschten Output.
Am Safemode hatte ich schon gedacht.
> Nun fällt mir ausser
> $cmd=escapeshellcmd($cmd);
> nichts mehr ein.
Hiermit springt der sshd auf dem Zielrechner gar nicht an.
Re: Brett vorm Kopf - shell_exec
am 17.09.2006 22:37:08 von Dirk Paschel
> Nur so als Iddee!
>
> Es gibt Anwendungen die Ihren Output nicht auf stdout schreiben.
> Mach mal am Ende des kommandos ein ' > whatever.txt' dran und schau mal ob
> in die angegebene Datei der output geschrieben wird. Aber schreib die
> Datei bitte in ein Verzeichnis in dem PHP schreibrechte hat. ;-)
Das habe ich schon.
Dies ist die log-Datei.
Diese Datei ist leer.
$cmd = "cat /etc/hosts";
$aktion = shell_exec($cmd);
echo "
" . $cmd;
echo "
" . $aktion;
rbringt :
cat /etc/hosts
127.0.0.1 localhost
$cmd = "/bin/plink -ssh -2 -batch -P 22 -l root -pw XXXX 12.34.56.78 -m " .
$Datei . " >" . $Log ;
$aktion = shell_exec($cmd);
echo "
" . $cmd;
echo "
" . $aktion;
rbringt :
/bin/plink -ssh -2 -batch -P 2200 -l root -pw XXXX 12.34.56.78 -m
/srv/www/httpdocs/sms_temp/web1-95457.cmd
>/srv/www/httpdocs/sms_temp/web1-95457.log
und " exit before auth: error reading: Connection reset by peer" auf dem
Zielrechner
>
> Wenn dort alles OK ist informiere Dich wie Du auf Deinem OS den Output
> entsprechend umleiten kannst.
>
> MfG, Ulf
Re: Brett vorm Kopf - shell_exec
am 17.09.2006 22:46:58 von Dirk Paschel
Hi!
> Ich glaub ich weiß es jetzt...
> Vermutlich wird nachdem php die scriptausfürung beendet hat auch die
> Connection terminiert.. wie wenn du dich aus der shell ausloggst und
> deinen Prozessen der sighup gesendet wird.
>
> mach mal
>
> $cmd = "nohup /bin/plink -ssh -2 -v -P 22 -l rupps -pw XXXXX
> 98.76.54.43 -m " .
> $Datei . " >" . $Log ." &";
ohne Änderung
Re: Brett vorm Kopf - shell_exec
am 17.09.2006 22:53:49 von Ulf Kadner
Dirk Paschel wrote:
> Das habe ich schon.
> Dies ist die log-Datei.
>
> Diese Datei ist leer.
Ups hatte ich übersehen das da schon ne pipe in die Log-Datei ist.
probiers mal mit proc_open
http://www.php.net/manual/en/function.proc-open.php
Damit bekommste eigentlich alles zum laufen.
MfG, Ulf
Re: Brett vorm Kopf - shell_exec (Fehler gefunden, aber nicht gelöst)
am 17.09.2006 23:49:50 von Dirk Paschel
> probiers mal mit proc_open
> http://www.php.net/manual/en/function.proc-open.php
>
> Damit bekommste eigentlich alles zum laufen.
Nicht alles:
"The server's host key is not cached."
Der Benutzer wwwrun hatte noch keine ssh-Verbindung zum Zielserver.
Wie löst man denn sowas????
Re: Brett vorm Kopf - shell_exec (Fehler gefunden, aber nicht gelöst)
am 18.09.2006 08:54:15 von Ulf Kadner
Dirk Paschel wrote:
> Nicht alles:
>
> "The server's host key is not cached."
Das ist ne Fehlermeldung Deines Programmes! Nicht von PHP. Damit kann
ich nix anfangen, da ich Dein Programm nicht kenne.
MfG, Ulf
[OT] ssh (was: Re: Brett vorm Kopf - shell_exec (Fehler gefunden, aber nicht gelöst))
am 18.09.2006 12:33:09 von Jens Himmelrath
Dirk Paschel schrieb:
>> probiers mal mit proc_open
>> http://www.php.net/manual/en/function.proc-open.php
>>
>> Damit bekommste eigentlich alles zum laufen.
>
> Nicht alles:
>
> "The server's host key is not cached."
>
> Der Benutzer wwwrun hatte noch keine ssh-Verbindung zum Zielserver.
>
> Wie löst man denn sowas????
Hier OT, aber:
Finde heraus in welcher Datei dein Programm die Informationen speichert,
oft ist das nur eine Textdatei - bei mir z.B. [...home...]/.ssh/known_hosts.
Oder: Eventuell hat das Programm einen Parameter um einen Hostkey
hinzuzufügen, oder man kann wie bei meinem ssh in der config-datei den
Parameter "StrictHostKeyChecking" ändern.
regards,
Jens