SSH Bash Aufruf auf einem anderen Pi

Heute ist Stammtischzeit:
Jeden Donnerstag 20:30 Uhr hier im Chat.
Wer Lust hat, kann sich gerne beteiligen. ;)
  • [font="Georgia"]Hallo zusammen,[/font]

    [font="Georgia"]Ich versuche gerade von einem Pi ein Bash Skript meines zweiten Pi's aufzurufen.[/font]

    [font="Georgia"]Versucht hätte ich das ganze so:[/font]

    [font="Arial"]

    Code
    ssh pi@10.0.0.93 /home/pi/Projects/sudowebscript.sh switchLightWeb [color=#c33720][b]$1[/b][/color]

    [/font]

    [font="Arial"]Um mir die PW Eingabe zu ersparen hab ich einen Key wie HIER erklärt angelegt. Von der Konsole aus eingeloggt funktioniert das ganze ganz gut. Jedoch wenn ich das Skript von meinem FHEM Server aufrufen lasse, kommt ein "Permission denied".[/font]
    [font="Arial"]Den Skript Aufruf von FHEM hab ich wie HIER gemacht und funktioniert auch für die lokalen Skripte.[/font]

    [font="Arial"]Liegt es hier daran, dass es ein anderer User (ev. www-data?) aufruft und somit keinen SSH Zugang am anderen Raspberry bekommt oder wo könnte das Problem liegen?[/font]

    [font="Arial"]Danke schon mal für einen Tipp![/font]

    [font="Arial"]Liebe Grüße[/font]

    [font="Georgia"]Thomas[/font]

    Einmal editiert, zuletzt von oytschi (5. Mai 2016 um 14:03)


  • Ich versuche gerade von einem Pi ein Bash Skript meines zweiten Pi's aufzurufen.

    Versuch mal mit:

    Code
    ssh pi@10.0.0.93 "/home/pi/Projects/sudowebscript.sh switchLightWeb $1"

    The most popular websites without IPv6 in Germany.  IPv6-Ausreden

    Meine PIs

    PI4B/8GB (border device) OpenBSD 7.4 (64bit): SSH-Server, WireGuard-Server, ircd-hybrid-Server, stunnel-Proxy, Mumble-Server

    PI3B+ FreeBSD 14.0-R-p3 (arm64): SSH-Serv., WireGuard-Serv., ircd-hybrid-Serv., stunnel-Proxy, Mumble-Serv., ddclient

    PI4B/4GB Bullseye-lite (64bit; modifiziert): SSH-Server, WireGuard-Server, ircd-hybrid-Server, stunnel-Proxy, Mumble-Server, botamusique, ample

  • Danke für den Tipp aber im FHEM bekomme ich im LOG folgenden Eintrag:


    Code
    Permission denied, please try again.
    Permission denied, please try again.
    Permission denied (publickey,password).
    2016.05.05 15:24:06 3: n_BadezimmerLichtActiveNotify return value: -1


    Wenn ich mich jedoch auf dem Rasperry, wo das FHEM drauf lauft als pi anmelde und den Befehl wie oben ausführe, schaltet das Licht am anderen Raspberry.

    Einmal editiert, zuletzt von oytschi (5. Mai 2016 um 15:25)

  • haha ja aber ich komm nicht weiter ;)
    Automatisch zusammengefügt:
    Bzw. gibt es eine schönere Methode mit dem anderen Pi zu kommunizieren bzw. wie kann man ein besten ein Interface zum Datenaustausch machen (Temperaturwerte,...).

    Einmal editiert, zuletzt von oytschi (5. Mai 2016 um 16:34)


  • Bzw. gibt es eine schönere Methode mit dem anderen Pi zu kommunizieren ...

    Du könntest Z. B. auf deinem anderen PI, socat installieren und danach socat zum Ausführen eines Scriptes dort lauschen lassen. Dann kannst Du das Script auch mit nc oder mit einem Bowser (oder gleichwertig) starten.

    Code
    socat -u -T 1 TCP4-LISTEN:<Port>,bind=0.0.0.0,reuseaddr,fork EXEC:/<Pfad>/<zum>/<Script>/Script> &

    The most popular websites without IPv6 in Germany.  IPv6-Ausreden

    Meine PIs

    PI4B/8GB (border device) OpenBSD 7.4 (64bit): SSH-Server, WireGuard-Server, ircd-hybrid-Server, stunnel-Proxy, Mumble-Server

    PI3B+ FreeBSD 14.0-R-p3 (arm64): SSH-Serv., WireGuard-Serv., ircd-hybrid-Serv., stunnel-Proxy, Mumble-Serv., ddclient

    PI4B/4GB Bullseye-lite (64bit; modifiziert): SSH-Server, WireGuard-Server, ircd-hybrid-Server, stunnel-Proxy, Mumble-Server, botamusique, ample

    Einmal editiert, zuletzt von rpi444 (5. Mai 2016 um 17:21)


  • Danke für den Tipp aber im FHEM bekomme ich im LOG folgenden Eintrag:


    Code
    Permission denied, please try again.
    Permission denied, please try again.
    Permission denied (publickey,password).
    2016.05.05 15:24:06 3: n_BadezimmerLichtActiveNotify return value: -1


    Wenn ich mich jedoch auf dem Rasperry, wo das FHEM drauf lauft als pi anmelde und den Befehl wie oben ausführe, schaltet das Licht am anderen Raspberry.


    Es sieht so aus als würde sudowebscript.sh noch irgendwas machen wollen wo es als remoter User keine Berechtigung hat. Kannst Du rausfinden was das ist?
    Versuche mal

    Code
    ssh pi@10.0.0.93 "bash -x /home/pi/Projects/sudowebscript.sh switchLightWeb $1 &>/tmp/sudowebscript.log"

    und siehe Dir /tmp/sudowebscript.log an.

  • Du könntest Z. B. auf deinem anderen PI, socat installieren und danach socat zum Ausführen eines Scriptes dort lauschen lassen. Dann kannst Du das Script auch mit nc oder mit einem Bowser (oder gleichwertig) starten.

    Code
    socat -u -T 1 TCP4-LISTEN:<Port>,bind=0.0.0.0,reuseaddr,fork EXEC:/<Pfad>/<zum>/<Script>/Script> &

    Passt das schau ich mir gleich mal an! Danke mal für den Tipp!

    Zitat

    [font="Source Sans Pro, Tahoma, Helvetica Neue, Arial, sans-serif"]und siehe Dir /tmp/sudowebscript.log an.[/font]

    In das Log schreibt er genau das selbe rein, wie im FHEM ins Log.

    Code
    Permission denied, please try again.
    Permission denied, please try again.
    Permission denied (publickey,password).
  • Na weil Du vermutlich für den User, mit dem FHEM daherkommt, noch einen key eintragen musst.
    Da muss aber wer anders her ... rpi444 z.B. ... der schüttelt das aus dem Ärmel. Ich müsste da erst noch nachschauen.
    Ach ja ... als welcher Nutzer das aufgerufen wird, müsste meines Erachtens nach im Log vom Server stehen.

    cu,
    -ds-

  • ja ich dachte eben dass der User www-data das sein könnte. Ist der nicht für so Website Daten Anwendungen zuständig?

    Müsste ich dann einen Key so wie für den User pi für www-data anlegen?
    Für pi hab ich das folgendermaßen gemacht:

    Code
    ssh-keygen -t rsa -C thomas@pi
  • Also die Funktion die von FHEM aus dann aufgerufen wird sieht folgendermaßen aus:


    Code
    function setBathRoomLight {
            `ssh pi@10.0.0.93 bash -x /home/pi/Projects/sudowebscript.sh switchLightWeb $1 &>/tmp/sudowebscript.log`
    }
  • Hast du die Function selbst erstellt? Ist das ne bash function ? Wofür die ` ? Was wird der Function übergeben, also wie sieht dessen Aufruf aus? $1 muss ja nen Zweck haben...

  • Also das ganze lauft so ab:
    Ich habe über FHEM ein paar Dummy Devices angelegt, welche auch als Homekit Komponenten sichtbar sind und über Siri gesteuert werden können.
    Unter FHEM ist ein Notify angelegt, welches beim Wechsel eines Status ein Bashskript aufruft.
    Dieses ruft also, wie im ersten Post erklärt das Skript sudowebscript.sh auf und übergibt einen Funktionsnamen und einen Wert. Diese Funktion ist dann wie im letztens Post aufgeführt "setBathRoomLight" welche den SSH Aufruf startet und am anderen Raspberry das Skript ausführen soll, wo das Relais mit dem Licht dran hängt.
    Dort ist eben auch wieder ein sudowebscript.sh Skript, welche dann auf die eigentlich Funktion verzweigt....Grund dafür ist, dass ich es eigentlich ursprünglich über den Aufruf einer URL auf dem zweiten Raspberry machen wollte.

  • *Bahnhof* :fies: Etwas zu viel Chaos ;) Ein Bash Script was ein anderes Bash Script ausführt um noch ein Bash Script auszuführen......

    Was steht in /home/pi/Projects/sudowebscript.sh ?


    FHEM führt etwas aus - ein bash Script. Dieses FHEM-bash-Script soll etwas auf einem anderen Pi auslösen.

    Wieso setzt du nicht einfach ein Befehl ab um eine URL aufzurufen?

  • Wenn du bereits ein sudowebscript hast, dann wird auf dem 2.Pi auch ein Webserver laufen bei dem du via POST o.ä. ein Konsolenbefehl o.ä. ausführst... Also machst du das jetzt einfach so das FHEM einen Konsolenbefehl ausführt um diesen POST auszulösen.

    Da ich keine Ahnung habe wie deine PHP Datei für sudowebscript aussieht, hier ein BEISPIEL für FHEM:

    Code
    curl --request POST http://10.0.0.93/index.php --data "param1=value1&param2=value2"


    Siehe dazu auch:
    http://stackoverflow.com/questions/1497…g-curl-in-linux
    http://stackoverflow.com/questions/1820…-a-curl-request


    PS: FHEM kann den Befehl i.d.R. direkt ausführen, es wird also eigentlich keine extra bash Script Datei benötigt.

  • Wenn FHEM in der Lage ist eine bash Script Datei auszuführen, dann ist es auch in der Lage einen Konsolenbefehl wie curl auszuführen, denn die Konsole ist bash... Alternativ kann man von FHEM auch bash -c "befehl" ausführen lassen...

    Du hast doch bereits eine sudowebscript.sh Datei in Verwendung oder nicht? Wenn ja dann nutzt du bereits die von mir gezeigte Anleitung, irgendwas mit $_POST oder $_GET

    Und wenn du nicht POST sondern GET verwendest, kannst du ganz einfach curl "http://10.0.0.93/switchBathRoomLight.php?state=1" verwenden...Wobei ich es jetzt komisch finde wieso du eine switchBathRoomLight.php Datei hast, aber egal - scheint Mode zu sein für jede Kleinigkeit eine neue Datei zu nutzen.

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!