Nach Umstellung auf 4.1 funktioniert shell_exec nicht mehr

Hallo,

ich habe auf Raspi 3 mit Jessie und IPS 4.1 umgestellt. Läuft soweit stabil.

Nur,… der folgende Befehl wird nicht mehr ausgeführt.

shell_exec("ssh pi@192.168.xxx.xx sudo pilight-send -p impuls -u 1 -s 28 -t");

Gebe ich den Befehl direkt in der Shell des IPS Servers ein, funktioniert es.

ssh pi@192.168.xxx.xx sudo pilight-send -p impuls -u 1 -s 28 -t

Die einzige Änderung die ich vorgenommen habe, ich musste auf dem IPS-Raspi einen neuen Public-Key erzeugen. Seitdem entfällt das Sudo vor dem ssh. Kann da ein Zusammenhang liegen ? Aber wenn es doch in der Shell direkt funktioniert ? Bin für jeden Tipp dankbar.

Volker

Kannst du dich mal mit „sudo su“ als root einloggen und den Befehl dann dort ausführen? Läuft es danach wieder in IPS?

paresy

Hallo paresy,

mit sudo su auf dem IPS Raspi erfolgt eine PW Abfrage, nach Eingabe des PW wird der Befehl übertragen. Aus dem Script heraus jedoch funktioniert es nach wie vor nicht.

Volker

Hast du nach dem sudo su auch deinen ssh Befehl ausgeführt?

paresy

Hallo,

ja, habe den ssh Befehl ausgeführt, musste aber in dem Fall das PW eingeben damit der Befehl ausgeführt wird.
Habe dann das Script laufen lassen, keinen Erfolg. Dann Sudo su beendet, auch danach schaltete das Script nicht.
Aus der „normalen“ Shell ( pi@192… heraus konnte ich den ssh ausführen, Befehl ging ohne PW Abfrage durch und schaltete… kann es sein, dass shell_exec aus dem Script heraus andere Rechte besitzt als der Befehl direkt aus der Shell ?

Volker

Habe genau das gleiche Problem wie Dithmarscher.
Wenn ich den ssh-Befehl (ssh root@192.168.2…) direkt in Putty eingebe, funktioniert es; aus IPS raus aber nicht.
Gibt es da mittlerweile schon eine Lösung?

Grüße,
Jürgen

Das ist bei mir genau so.

In der Raspberry Shell (Raspberry = Symcon Server) gebe ich ein:
ssh michael@192.168.178.8 „display_on.bat“);
Bildschirm auf dem windows PC schaltet sich ein. Funktioniert also.

Führe ich im Script:
shell_exec(‚michael@192.168.178.8 „display_on.bat“‘);
aus, dann keine Funktion.
Ich suche sch seit 2 Wochen nach einer Lösung, finden kann ich leider nichts.

Da fehlt irgendwie das ssh…
Und dann die übliche Frage, hast du den Befehle aus der Console unter dem gleichen Benutzer ausgeführt unter dem IPS läuft (root)?
Sonst ist das ja nicht vergleichbar.
Michael

Danke für Deine Info.
Ja stimmt. In der Eile nicht dazugeschrieben. Also im Script ist SSH dabei.
Das mit dem user als „root“ klingt interressant.

Heißt das, das Symcon als Root auf dem Raspi arbeitet? Wusste ich bisher nicht, sorry.

In der Console arbeite ich als User „pi“.

Hm, jetzt stellt sich mir die Frage:
Muss ich „root“ vor den ssh Befehl stellen?
Also in etwa :
shell_exec(‚root ssh michael@192.168.178.8 „.bat“‘)?

Gruß…

Hi, nein, was du machen möchtest ist „sudo ssh michael@…“
Damit führst du ssh als root aus. Dann wirst du gefragt ob du den gegenüber vertraust (was du möchtest) und musst dann das Passwort eingeben. Wenn du mit keys arbeitest müssen die in /root/.ssh/ rein

Viele Grüße

Gesendet von iPhone mit Tapatalk

So, vielen Dank an alle und Eure Hinweise.
Nach kopieren der „id_rsa“ in den Pfad root/.ssh und Vergabe der entsprechenden Rechte der Datei „id_rsa“ auf den Benutzer „Sudo“ ergibt sind nun folgendes:

Eingabe in der Raspi Konsole:

  1. pi@mypi:$ sudo su
  2. root@mypi:/home/pi# ssh michael@192.168.178.8 -p 6767 „display_on.bat“
    –> Bildschirm am WIN10 PC schaltet sich ein.

SCRIPT: (Info: IPS ist auf dem gleichen Raspi installiert)
$output = shell_exec(‚ssh michael@192.168.180.8 -p 6767 „display_on.bat“‘);
echo $output;
–> Es passiert nichts, kein einschalten des entfernten Bildschirms.

Tja, irgendwie bin ich mit meinen Ideen am Ende…???

Einmal „192.168.178.8“ und einmal „192.168.180.8“ ???

Leider ein Tippfehler hier im Forum von mir - ich habe es wie folgt eingegeben:

Eingabe in der Raspi Konsole:

  1. pi@mypi:$ sudo su
  2. root@mypi:/home/pi# ssh michael@192.168.178.8 -p 6767 „display_on.bat“
    –> Bildschirm am WIN10 PC schaltet sich ein.

SCRIPT: (Info: IPS ist auf dem gleichen Raspi installiert)
$output = shell_exec(‚ssh michael@192.168.178.8 -p 6767 „display_on.bat“‘);
echo $output;
–> Es passiert nichts, kein einschalten des entfernten Bildschirms.

Ich weiß nicht ob es Dir hilft, aber als ich die gleichen Versuche mit meinem iPad veranstalltete habe ich erfolgreich sshpass verwendet!

Auf dem pi:


$ sudo apt-get install sshpass

und dann im Script


echo exec('sshpass -p PASSWORD ssh root@192.168.0.xx "activator send libactivator.lockscreen.show"');

oder


IPS_Execute('sshpass', '-p PASSWORD ssh root@192.168.0.xx "activator send libactivator.lockscreen.show"', false, false);

Nutze das im Moment nicht, aber damals ging eine Variante (oder beide) davon!

Ciao Pitti

Also ich habe den Befehl

ssh michael@192.168.178.8 -p 6767 „display_on.bat“’
in eine Shell Datei abgelegt. --> Name: send_display_on.sh

Dann die Shell Datei ausführbar gemacht:
chmod +x send_display_on.sh

Dann im Script:

$output = shell_exec(’/usr/bin/send_display_on.sh’);
–> Keine Funktion, entfernter Bildschirm schaltet nicht sein.

Dann den Befehl 8x hintereinander ausgeführt:
$output = shell_exec(’/usr/bin/send_display_on.sh’);
$output = shell_exec(’/usr/bin/send_display_on.sh’);
$output = shell_exec(’/usr/bin/send_display_on.sh’);
$output = shell_exec(’/usr/bin/send_display_on.sh’);
$output = shell_exec(’/usr/bin/send_display_on.sh’);
$output = shell_exec(’/usr/bin/send_display_on.sh’);
$output = shell_exec(’/usr/bin/send_display_on.sh’);
$output = shell_exec(’/usr/bin/send_display_on.sh’);
–> Funktion i.O., also Bildschirm schaltet ein!!!

Das ist wiederholbar so, kein Zufall. Kann ich mir jetzt gar nicht erklären…
In der Raspi-Konsole genügt es, den Befehl „send_display_on.sh“ ledigleich 1x einzugeben.

Tja… undurchdringliche Tiefen des „shell_exec“ Kommandos…

Es funktioniert !!

Der Tipp von Pitti hat mich weitergebracht.
Ich habe auf dem IPS - Raspi das sshpass installiert und dann im Script die Befehlszeile wie folgt angepasst.
In meinem Fall lassen sich so Baumarkt-Funksteckdosen schalten.

shell_exec("sshpass -p PASSWORD ssh pi@192.168.XXX.XX sudo pilight-send -p impuls -u 1 -s 28 -t");

Warum nicht einfach etwas fertig nutzen ? :wink:
[Modul] pilight
Michael