Ankündigung

Einklappen
Keine Ankündigung bisher.

Exec Binding in Verbindung mit SSH

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

    Exec Binding in Verbindung mit SSH

    Hallo !

    Ich hänge hier am Exec-Binding.

    Aufbau ist wie folgt

    Raspberry Pi 1: steht im Keller und läuft Openhab (192.168.1.159)
    Raspberry Pi 2: steht auf dem Dachboden und steuert Funksteckdosen (192.168.1.160)

    Gebe ich in der Linux Konsole (Raspberry Pi 1) den Befehl

    Code:
    ssh [EMAIL="pi@192.168.1.160"]pi@192.168.1.160[/EMAIL] sudo /home/pi/rcswitch-pi/send 11111 1 1]
    wird dieser Befehl wunschgemäß ausgeführt.

    In meinem Binding rufe ich den Befehl wie folgt auf.

    Code:
    Switch Funksteckdose_1 "Funksteckdose 1" <socket> { exec=">[ON:ssh [EMAIL="pi@192.168.1.160"]pi@192.168.1.160[/EMAIL] sudo /home/pi/rcswitch-pi/send 11111 1 1]" }
    oder

    Code:
    Switch Funksteckdose_1 "Funksteckdose 1" <socket> { exec="ON:ssh [EMAIL="pi@192.168.1.160"][U][COLOR=#0066cc]pi@192.168.1.160[/COLOR][/U][/EMAIL] sudo /home/pi/rcswitch-pi/send 11111 1 1" }
    Leider funktioniert dies nicht.....Hat jemand eine Idee ?

    #2
    hast du schon mal versucht deinen Aufruf einfach in ein Batchfile zu schreiben und nur dieses dann aufzurufen?

    Kommentar


      #3
      Bist Du denn auf der Console mit dem selben Usernamen eingeloggt unter dem auch der openHAB Prozess läuft? Wenn nein, dann wird da das Problem sein.
      Gruß
      Tobias

      Kommentar


        #4
        Danke ! Beide Tips haben weiter geholfen !

        Es funktioniert jetzt...

        habe den Befehl in eine Batch gepackt und führe diese mit User-Rechten aus.

        Kommentar


          #5
          Hallo,

          ich hoffe es ist ok das ich dieses alte Thema wieder hervor hole.

          Zur Zeit versuche ich einen ssh Befehl in OH2 auszuführen. Leider führt das nicht zum gewünschten Erfolg. Da ich OH2 bzw. Linux Anfänger bin und mein Halbwissen aus den Tiefen des Internets hole, weiß ich nicht so schnell wo der Fehler liegt und erhoffe mir hier ein wenig Hilfe.

          Ich fange kurz mit meinem Aufbau an:
          1. Raspi:
          RaspberryPi3 mit LibreElec und Hyperion, IP: xxx.xxx.xxx.4
          Dieser ist am TV befestigt, Kodi und Ambilight(Hyperion) laufen einwandfrei. Hyperion lässt sich über ein IR Signal mit der Fernbedienung steuern. Dazu wird "ssh /storage/.config/hyperionswitch.sh" ausgeführt. Klappt alles ohne Probleme.

          2. RasPi:
          RaspberryPi3 mit Rasbian Stretch und OpenHab2.1.0, IP: xxx.xxx.xxx.5
          Dieser steht im Flur und übernimmt die Hausautomatisierung. AVM Fritz Binding etc. gehen auch. Steuerung mit Apple (HomeKit) auch möglich.

          Zum Problem:
          Ich möchte mit OpenHab2 bzw. Apple Homekit mein Ambilight per Schalter oder ähnliches (weiß nicht ob Taster dort möglich ist?) schalten können. Die Grundvoraussetzungen sind meiner Meinung nach auf beiden Raspberrys vorhanden. Der "Raspi mit OH2" kann über ssh ("ssh root@xxx.xxx.xxx.4 /storage/.config/hyperionswitch.sh") Hyperion am anderen RasPi an- bzw. ausschalten. Da man bei libreelec das root-Passwort nicht ändern kann und man sich bei ssh-Befehlen vom "RasPi mit OH2" auf den "RasPi mit Libreelec" mit einem Passwort authentifizieren muss, habe ich in LibreElec die Passwortabfrage für ssh deaktiviert und die Public Key Authentifizierung für die User "pi" und "root" durchgeführt (http://blog.helmutkarger.de/raspberr...ang-absichern/). Auch das klappt nun. SSH Befehle lassen sich ohne Abfrage des Passwortes für User "pi" und "root" durchführen, Hyperion schaltet je nach Zustand ein oder aus.

          Das eigentlich Problem ist nun das Binding für den ssh-Befehl. Durch die Google Suche bin ich auf dieses Forum bzw. diesem Beitrag gekommen. Wenn ich richtig liegen, ist das oben genannte Beispiel für OH1 gedacht. in meiner Konfiguration sieht es wie folgt aus:

          .things-File:
          Code:
           Thing exec:command:hyperionsw [command="ssh root@xxx.xxx.xxx.4 /storage/.config/hyperionswitch.sh"]
          .items-File:
          Code:
           Switch HyperionSw {channel="exec:command:hyperionsw:run"}
          In der PaperUI von OH2 finde ich die Items und Things auch. Auf der Controlseite, in der App und in HomeKit finde ich auch den passenden "Schalter". Wenn ich diesen allerdings schalten möchte, passiert nichts. Das Exec-Binding ist unter Addons selbstverständlich installiert. Konfigurationen oder weitere Addons habe ich dem nicht hinzugefügt.

          Habe ich irgendwas vergessen? Gibt es noch einen User "openhab" oder so der die Befehle ausführt? Ich kenne mich mit Exec bzw. dem Binding nicht gut genug aus. Die Steuerung der anderen Gerät im Haushalt mit den entsprechenden Bindings und passendem Eintrag in die .items-File klappt allerdings ohne Probleme.

          Ich hoffe das ich mein Problem verständlich genug erläutert habe. Über Hilfe wäre ich sehr dankbar
          Zuletzt geändert von Web86; 26.10.2017, 13:17.

          Kommentar


            #6
            Zitat von Web86 Beitrag anzeigen
            Gibt es noch einen User "openhab" oder so der die Befehle ausführt?
            Wenn Du openHAB auf herkömmlichem Weg installiert hast, also über die Paketverwaltung apt(-get), wird automatisch ein User openhab angelegt, unter dem openHAB gestartet wird. Unter dessen Rechten laufen alle Scripte, die per exec gestartet werden.
            Das Hauptproblem wird vermutlich sein, dass ssh nicht weiß, welches keyfile er verwenden soll. Der User openhab hat per default kein home-Verzeichnis (das ist auch beabsichtigt). Eine mögliche Variante ist, ssh beim Aufruf eine Information über das zu verwendende keyfile mitzugeben:
            Code:
            ssh -i /etc/openhab2/keys/libreelec/root/id_rsa root@192.168.x.4 /storage/.config/hyperionswitch.sh
            Du solltest den Befehl auf jeden Fall testen. Natürlich musst Du zuerst das Keyfile entsprechend platzieren, also ins richtige Verzeichnis legen. Wo das File liegt, ist letztlich egal, wichtig ist nur, dass openhab (der User) alleinige Rechte am Ordner und den darin enthaltenen Dateien hat. Das erreicht man mittels
            Code:
            sudo chown openhab: id_rsa
            sudo chmod 600 id_rsa
            Ob der User openhab den Befehl erfolgreich absetzen kann, kannst Du testen, indem Du dem ssh-Befehl ein sudo -u openhab voranstellst, dann wird der nachfolgende Befehl als user openhab ausgeführt.

            Grundsätzlich könntest Du auch auf dem Raspberry mit LibreElec zusätzlich einen User openhab anlegen und für diesen ein Schlüsselpaar erzeugen. Dann kannst Du gezielt diesem User gestatten, ganz bestimmte Befehle über ssh auszuführen, das ist sicherer, als den root-Zugriff komplett ohne Passwortabfrage zu erlauben. Du musst immer daran denken, dass vielleicht
            1. jemand bösartig auf deinem openHAB-Rechner eindringt und sich dort des Schlüssels bemächtigt, dann ist er ohne weitere Anstrengung "Gott" auf dem LibreElec-System. oder
            2. es tritt ein ganz blöder Fehler in openHAB auf weshalb unkontrolliert Befehle über die ssh-Verbindung abgesetzt werden.

            Beides ist zwar unwahrscheinlich, vermutlich kannst Du LibreElec auch schnell wiederherstellen, falls es mal kaputt ist, aber zumindest ist es ärgerlich, wenn es denn doch passiert und man es doch leicht hätte verhindern können.

            Ich habe Ähnliches zur Steuerung eines Calibre-Servers eingerichtet, damit meine Frau die Webschnittstelle bequem Ein- und Ausschalten kann und zwar auf Basis einer Einrichtung zur Sicherung von (My)SQL Datenbanken.
            Dabei habe ich mich hiervon inspirieren lassen: https://legacy.thomas-leister.de/ser...-rdiff-backup/

            Kommentar


              #7
              Zitat von udo1toni Beitrag anzeigen
              Wenn Du openHAB auf herkömmlichem Weg installiert hast, also über die Paketverwaltung apt(-get), wird automatisch ein User openhab angelegt, unter dem openHAB gestartet wird. Unter dessen Rechten laufen alle Scripte, die per exec gestartet werden.
              Das Hauptproblem wird vermutlich sein, dass ssh nicht weiß, welches keyfile er verwenden soll. Der User openhab hat per default kein home-Verzeichnis (das ist auch beabsichtigt). Eine mögliche Variante ist, ssh beim Aufruf eine Information über das zu verwendende keyfile mitzugeben:
              Danke erstmal für deinen Beitrag. Die Info das OpenHab die Befehle über den User openhab absetzt war Gold wert. Ich habe ein neues Schlüselpaar mit
              Code:
              sudo -u openhab
              angelegt. Dieser wurde unter /var/lib/openhab2/.ssh abgelegt. Hab dann von Hand die authorized_keys in LibreElec unter /storage/.ssh ergänzt und versucht die Befehle mit
              Code:
              ssh -u openhab root@xxx.xxx.xxx.4 /storage/.config/hyperionswitch.sh
              auszuführen. Klappt jetzt ohne Probleme

              Jetzt muss ich nur noch rausfinden wie ich aus dem Schalter einen Taster mache und den in HomeKit einbinden kann.Taster sind in HomeKit wohl ohne weiteres nicht einsetzbar. Aber das ist jetzt erstmal eine andere Baustelle.

              Kommentar


                #8
                So, habe doch noch etwas Probleme bei dieser Schaltung, vielleicht könnt ihr mir da weiterhelfen.

                Habe Das "Thing" und das "Item" wie oben beschrieben angelegt. Allerdings macht sich diese Schaltung gerne mal selbstständig. Es scheint mir so, als würde OH2 den Status bzw. Befehl bei jedem öffnen von Homekit neu absetzen und den Schalter somit selbstständig auslöst.
                Da ich nicht möchte, dass meine Beleuchtung immer an geht würde ich das gerne in Rules festlegen. Wie müsste so eine Regel den aussehen wenn die Befehle "ssh
                root@xxx.xxx.xxx.4 /storage/.config/hyperion_starten.sh" und "ssh root@xxx.xxx.xxx.4 /storage/.config/hyperion_beenden.sh" ausgeführt werden sollen?

                Meines Wissens nach sollte es doch so funktionieren:
                Code:
                rule "Hyperion"
                when
                Item HyperionSW received command
                then if (receivedCommand==ON )
                { executeCommandLine("ssh root@xxx.xxx.xxx.4 /storage/.config/hyperion_starten.sh") }
                else if (receivedCommand==OFF )
                { executeCommandLine("ssh root@xxx.xxx.xxx.4 /storage/.config/hyperion_beenden.sh") }
                end
                Wie muss ich das thing dann noch anpassen? Einfach den Start-Befehl nutzen?

                Kommentar

                Lädt...
                X