SSH per PHP z.B. um AppleScript auszuführen mit Siri Beispiel :-)

Dann bekomme ich aber einen Error

Fatal error:  Cannot use [] for reading in /var/lib/symcon/scripts/49235.ips.php on line 2

Wenn man ein Problem/Fehler in einem Script hat, dann sollte man das Script hier mit posten…sonst können die anderen im Forum es mit hellsehen versuchen oder nicht antworten (ist meistens der Fall) :wink:

Grüße,
Chris

Sorry,

hab es von dir übernommen und User sowie Server meines NAS eingetragen

<?
$output[] = shell_exec('ssh User@Server "df -h"');
print_r($output);
?> 

Der Shell Befehl funktioniert direkt auf dem NAS. Nur hier kommt ein Fehler, womit ich im ersten Moment nichts anfangen kann.

Gruß oekomat

PS: hab mich nach der Anleitung gerichtet: https://www.fene-blog.de/linux-ssh-zugriff-ohne-passwort-per-ssh-key-konfigurieren/

Direkt auf dem NAS? Wo läuft dein IPS denn? Etwa in einem Docker-Container auf dem NAS?

Probier mal:

<?
$output = array();
array_push($output, shell_exec('ssh User@Server "df -h"'));
print_r($output);
?>

Wenn das auch nicht klappt, kannst du es auch einfach so machen:

<? 
$output = shell_exec('ssh User@Server "df -h"');
print_r($output); 
?>

Einige PHP Versionen haben das „Problem“ mit … laut Google …

Grüße,
Chris

Mein ips läuft auf einem rpi3. Ich muss quasi vom rpi aufs nas ohne passwortabfrage.

Gesendet von meinem SM-G930F mit Tapatalk

Ok, dann muss das so klappen wie eben von mir beschrieben :slight_smile:
Sofern du das „SSH ohne Key“ von Rpi zum NAS sauber eingerichtet hast.

Kannst du einfach testen, wenn dich beim Rpi per SSH einloggst und den Befehl dort direkt eintippst…dann darf der nicht meckern wg. Benutzer/Passwort oder sowas, sondern muss brav den Befehl ausführen. Wenn das klappt, dann klappt es auch wie von mir beschrieben aus IPS heraus.

Grüße,
Chris

ok, dann einen Schritt zurück. Vom Raspberry komm ich mit ssh user@server drauf, aber er fragt nach dem Passwort und lässt mich dann drauf. Ich habe erstellen des Schlüssels (id_rsa) auch ein Passwort zum sichern eingegeben. will er das dort? (bei mir sind dieses und das des Benutzers identisch)

unabhängig davon bringt dein letzter Skript folgenden Fehler:

Fatal error:  Call to undefined function  shell_exec() in /var/lib/symcon/scripts/49235.ips.php on line 2

So, jetzt wieder einen Schritt vor. Wenn ich jetzt ssh user@server „df -h“ per commando im raspi eintippel, komme ich auf nas und bekomme die Anzeige zum Speicher. Nutze ich deinen Skript:

<?
$output = shell_exec('ssh user@server "df -h"'); 
print_r($output);
?>

kommt der Fehler


Fatal error:  Call to undefined function  shell_exec() in /var/lib/symcon/scripts/49235.ips.php on line 2

Irgendwas stört da noch.

Edit: wenn ich die Leerzeichen vor und nach dem „=“ entferne, dann kommt gar nichts als Ausgabe. Der Skript läuft aber ohne Fehler durch. Wenn ich deinen vorletzten Skript nutze, bekomme ich als Ausgabe:

Array
(
    [0] => 
)

Seltsam :confused:

Hat jemand anderes einen Raspberry da und kann mal shell_exec testen?

Welche IPS-Version hast du installiert?

Läuft dein IPS-Service als „root“ oder als anderer Benutzer der evtl. einfach keine Shell oder keine Rechte hat? Oder gibt es da bei PHP im IPS eine Einstellung, wo man das Verbieten kann?

Google sagt, es gibt in der php.ini eine Zeile mit „disable_functions“…da könnte sowas drin stehen…
disable_functions = exec,passthru,shell_exec,…

Evtl. ist auch irgendwas mit chmod oder chown zu machen bei dir…
Hast du da mal was gebastelt? Behaupte mal, dass das bei einem Standard-Raspberry-Install funktioniert :confused:

Grüße,
Chris

das glaub ich, wobei der RPI in Putty die Befehle ja auch ausführt, nur aus IPS nicht

da muss ich heute abend mal schauen, bin gerade unterwegs - vor 2 Monaten hab ich mal aktualisiert

ich hab auf dem RPI nur einen user, der heisst „pi“, an rechten hab ich da nichts geändert

Der RPI ist bei mir Standard, zum basteln nehm ich meinen 2. :slight_smile:

Ein Referenzuser wäre wohl am besten ?!

Ich hab Version 4.3 installiert.

Wenn ich den Befehl ssh user@server „/bin/echo mem > /sys/power/state 2>/dev/null“ direkt auf dem Raspi ausführe ohne IPS, bekomm ich die Abfrage nach dem Phrase-Passwort…das verwirrt mich jetzt aber.

Gruß oekomat

Wenn du mit SSH auf dem Raspberry eine Passwortabfrage bekommst, dann läuft da schon was schief…

Und das mit shell_exec im IPS is eine andere Baustelle und ein extra Problem…

Lösung kann ich dir aber grad leider keine Anbieten.

Grüße,
Chris

So, wenn ich deinen Befehl

ssh user@ server "df -h"

direkt auf dem Raspberry ausführe, bekomme ich den Speicher des NAS angezeigt, ohne Passwortabfrage. Das läuft schon mal. mich wundert ja schon, dass bei dem Skript

$output=array();
array_push($output,shell_exec('ssh user@server "/bin/echo mem > /sys/power/state 2>/dev/null"'));
print_r($output);

die gleiche Ausgabe kommt.

Array
(
    [0] => 
)

Gibt es denn keine andere Möglichkeit aus IPS einen ssh-Befehl aubzusenden?

Kommt keine Fehlermeldung mehr mit „Call to undefined function shell_exec()“?? Bitte immer alle Infos posten, sonst kann man immer nur raten oder muss X-Mal nachfragen und das macht keinen Spaß…
Wenn die Fehlermeldung doch noch kommt mit „Call to undefined function shell_exec()“, dann musst du herausfinden, warum bei dir auf dem Raspberry kein „shell_exec“ und kein „exec“ erlaubt ist. Gibt ja einige Treffer dazu bei Google und irgendwas davon wird auch bei dir helfen und „shell_exec“ und „exec“ zum Laufen bringen in deinem IPS…
Aus der Ferne ohne Zugriff auf dein System und ins Blaue hinein kann man da nicht wirklich helfen…

Grüße,
Chris

ok, dachte du sieht die vorhergehenden Posts noch mit dem linken Auge ,-)
also:
bei

$output = shell_exec('ssh user@server "/bin/echo mem > /sys/power/state 2>/dev/null"');
print_r ($output); 

bekomme ich gar keinen Fehler und kein Ergebnis, Ergebnisfeld bleibt einfach leer.

bei.

$output=array();
array_push($output,shell_exec('ssh admin@anlianma "/bin/echo mem > /sys/power/state 2>/dev/null"'));
print_r($output);

bekomme ich als Antwort im Ergebnisfeld

Array
(
    [0] => 
)

Grüße (danke für deine Hilfe bis hierher)

Die Post sind mir schon noch bekannt :smiley: Aber von Post zu Post kann sich ja mal was ändern…hast ja auch rumgebastelt…von daher :wink:

Was gibt dir das folgende Script aus?

<?
$output = shell_exec('df -h');
print_r($output);
?>

Kein Ding!
Grüße,
Chris

Der Fehler kommt nicht mehr, der Skript liefert den Speicher des Raspi

Na dann is doch alles wunderbar :slight_smile:

Wenn das folgende Script auch noch funktioniert, dann klappt alles bis auf dein Befehl an sich…

<?
$output = shell_exec('ssh user@server "df -h"');
print_r($output);
?>

Klappt das, dann stimmt was mit diesem Befehl von dir nicht:

/bin/echo mem > /sys/power/state 2>/dev/null

Was soll das denn machen? Ausgabe nach „/dev/null“ kommt mir eh sinnlos vor?!? Wenn du den Befehl direkt auf dem NAS „ausführst“, dann bekommst du eine Ausgabe?

Grüße,
Chris

Und jetzt bekomme ich hier gar keine Anzeige im Ergebnisfeld.

Führe ich den Befehl auf dem raspberry direkt aus, zeigt er mir den Speicher vom NAS. Also stimmt da was nicht.

Der vorher von mit gezeigte Befehl fährt das NAS in den Sleep-modus, das funktioniert auch wenn ich das so vom Raspberry eintippel

pi@raspberrypi:~/.ssh $ ssh user@server "/bin/echo mem > /sys/power/state 2>/dev/null"

Aber ich kann die Brücke aus IPS zu SSH auf dem Pi nicht schlagen.

Baustelle 1:

Wenn das hier funktioniert:

<?
$output = shell_exec('df -h');
print_r($output);
?>

Dann ist Baustelle 1 erledigt und du kannst aus dem IPS heraus Befehle auf der Shell vom Raspberry ausführen. So als wärst du beim Raspberry über SSH eingeloggt. Also IPS lokal auf Raspberry Shell ist ok.
Bitte nicht durcheinander bringen.

[HR][/HR]

Baustelle 2:

Wenn das hier im IPS keine Ausgabe ergibt:

<?
$output = shell_exec('ssh user@server "df -h"');
print_r($output);
?>

Aber das hier direkt mit SSH auf dem Raspberry eingeloggt eine Ausgabe vom NAS-Plattenplatz bringt:

ssh user@server "df -h"

>> Dann verstehe ich das nicht :smiley: …macht nicht wirklich einen Sinn :confused: