PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : ssh2_exec problem



senfmensch
09-04-2006, 13:42
Hi,
ich habe mir mal die pecl erweiterung ssh2 installiert. ist auch ziemlich geil, nur habe ich ein problem mit ssh2_exec();
wenn ich z.B. so ein bashscript habe:
#!/bin/bash
echo hallo
screen -wipe
echo moo
weiterekommandosund dann dieses script per ssh2_exec aufrufe:
<?php
connectZeug();
$stream = ssh2_exec($connection, '/pfad/meines/bashscripts.sh', 'vt102', NULL, 80, 24, SSH2_TERM_UNIT_CHARS);
$ausgabe = false;
if ($stream) {
stream_set_blocking( $stream, true );
$ausgabe = fread( $stream, 4096 );
}
?>bei $ausgabe ist dann komischerweise das "moo" nicht dabei. heisst, es bricht nach dem `screen -wipe` ab :(
genau so verhaelt es sich, wenn z.B. ein "killall" im script steht

Habe auch schon mit den ssh2_exec parametern rumgespielt, jedoch kein erfolg gehabt.

Hoffe mir kann jemand helfen.

Viele Gruesse,
senfmensch

Romanday
09-04-2006, 23:52
Habe auch schon mit den ssh2_exec parametern rumgespielt, jedoch kein erfolg gehabt.

Hoffe mir kann jemand helfen.

Viele Gruesse,
senfmensch

Versuch:
Verwende in deinem Shellscript mal die here doc Syntax.

senfmensch
10-04-2006, 03:19
hi,
meinst du sowas ?
cat <(screen -wipe)
?
oder was ist heredoc ?

senfmensch
10-04-2006, 04:00
oh
wen ich das ganze so schreibe funktionierts:
<?php
$stream = ssh2_exec($connection, 'echo $(/pfad/meines/bashscripts.sh)', 'vt102', NULL, 80, 24, SSH2_TERM_UNIT_CHARS);kann sich das einer erklaeren ?

Romanday
11-04-2006, 07:25
oh
wen ich das ganze so schreibe funktionierts:
<?php
$stream = ssh2_exec($connection, 'echo $(/pfad/meines/bashscripts.sh)', 'vt102', NULL, 80, 24, SSH2_TERM_UNIT_CHARS);kann sich das einer erklaeren ?

Die Funktion wird ssh direkt ansprechen.
Wenn Du also vorher noch andere Spielchen mit andern Interpretern
machst, klappt das natürlich nicht. Dafür ist system() usw. geeignet.

Geschmackssache:
Wenn du also Action Local und Remote im gleichem Script machen möchstest,
würde ich das über die Shell regeln, sonst bist du immer ein
Prisoner der PHP Funktionen.

Außerdem überleg doch mal, wann welcher Interpreter mit welchem
return klar kommen muß.

--
ssh2_exec


(PECL)

ssh2_exec -- Execute a command on a remote server

Description

resource ssh2_exec ( resource session, string command [, string pty [, array env [, int width [, int height [, int width_height_type]]]]] )
--


Die here doc Syntax gibt es in PHP, Perl, Shell und wahrscheinlich noch
in anderen Interpretersprachen.
Also ganz alter Hut auf neuem Kopf.:D
http://www.google.de/search?hl=de&ie=ISO-8859-1&q=here+doc+bash&btnG=Google-Suche&meta=

senfmensch
12-04-2006, 17:01
Die Funktion wird ssh direkt ansprechen.
Wenn Du also vorher noch andere Spielchen mit andern Interpretern
machst, klappt das natürlich nicht. Dafür ist system() usw. geeignet.
ein $ ssh user@host /pfad/zu/meinem/script.sh funktioniert problemlos.
Geschmackssache:
Wenn du also Action Local und Remote im gleichem Script machen möchstest,
würde ich das über die Shell regeln, sonst bist du immer ein
Prisoner der PHP Funktionen.ich habs doch ueber die shell geregelt, indem ich ein shellscript geschrieben habe.
Außerdem überleg doch mal, wann welcher Interpreter mit welchem
return klar kommen muß.genau das versteh ich nicht. wieso wartet ssh2_exec das script und dessen exitcode nicht ab ?
--
ssh2_exec


(PECL)

ssh2_exec -- Execute a command on a remote server

Description

resource ssh2_exec ( resource session, string command [, string pty [, array env [, int width [, int height [, int width_height_type]]]]] )
--Ein bash script ist nix anderes als ein command oder ?
Die here doc Syntax gibt es in PHP, Perl, Shell und wahrscheinlich noch
in anderen Interpretersprachen.
Also ganz alter Hut auf neuem Kopf.:D
http://www.google.de/search?hl=de&ie=ISO-8859-1&q=here+doc+bash&btnG=Google-Suche&meta=Ja aber was bringt mir ein echo <<<EOF
blabla
EOF
bei meinem problem ?

Gruss
senfmensch

Romanday
13-04-2006, 01:46
>ich habs doch ueber die shell geregelt, indem ich ein shellscript geschrieben habe.

Na also.

>genau das versteh ich nicht. wieso wartet ssh2_exec das script und dessen exitcode nicht ab ?

die Funktion ist nun mal so.:D

>Ein bash script ist nix anderes als ein command oder ?
www.linuxfibel.de > lesen -a `man bash`

> Ja aber was bringt mir ein echo <<<EOF
Ist einfach bequemer zu warten wenn Du mehrere Anweisungen per SSH
übermittelst.

Um es kurz zu machen. 1000 Wege führen nach Rom. Man kann alles
in PHP oder Shell scheiben. Sollen beide aber miteinander harmonieren,
und möchte ich in einem Shellsript mehrere unterschiedliche Befehle
ausführen SSH + Init + PS etc. ist wartungsfreundlicher alles in einem
Shellscript zu regeln. (< in diesem Fall)

Um den Kopf zu lockern ::
Die Shell überschreibt mit jeder neuen Anweisung den return Wert des
letzten Befehls im Script.
Jetzt sollte klar sein das ssh2_exec() meckern muß, wenn du
vorher noch andere Anweisungen im Shellscript ausführst.
Außerdem braucht Sie keine zusätzliche Interpreter Anweisung.
(Das ist doppelt gepoppelt.)

senfmensch
18-04-2006, 19:29
die Funktion ist nun mal so.:D was ziemlich kacka ist :)
www.linuxfibel.de > lesen -a `man bash`ja ne wenn ich mir ein bashscript baue und es in den pfad haue, ist es ein command :>
Ist einfach bequemer zu warten wenn Du mehrere Anweisungen per SSH
übermittelst.okey. aber in meinem fall wird das script von PHP sowie von der Kommandozeile benutzt.
Die Shell überschreibt mit jeder neuen Anweisung den return Wert des
letzten Befehls im Script.
Jetzt sollte klar sein das ssh2_exec() meckern muß, wenn du
vorher noch andere Anweisungen im Shellscript ausführst.klar ist mir das nicht, da jeder andere exec befehl in php (sei es system, exec oder was auch immer) nicht in dieser art auf ein bashscript reagiert, sondern brav das scriptende abwartet.
Außerdem braucht Sie keine zusätzliche Interpreter Anweisung.
(Das ist doppelt gepoppelt.)Was meinst du damit? dieses echo $(..) ?
tja anders gehts halt nicht, ohne dass das Script fruehzeitig abbricht :-(

gruss
senfmensch