Seite 1 von 2

Monitor an anderem Rechner(Linux) aufwecken

Verfasst: 26. Jul 2023 20:14
von ollis112
Hallo,
folgendes Setup habe ich:
OH3 läuft auf einem Ubuntu System.
Habpanel läuft auf einem anderen Linux Rechner über Internet-.Browser.

Jetzt möchte ich, das bei einem bestimmten Ereignis der Monitor am Habpanel aufwacht.
per ssh geht das mit dem Befehl: xset dpms force on
Kann ich nun diesen Befehl über Openhab an den anderen Rechner senden lassen, damit der Monitor aufwacht?

Habe schon viel gesucht aber nicht wirklich etwas gefunden, oder nicht verstanden.... :roll:

Würde mich sehr über Hilfe freuen.

Gruß
Oliver

Re: Monitor an anderem Rechner(Linux) aufwecken

Verfasst: 27. Jul 2023 15:33
von mad-mike
Moin.
Ich als Laie würde es mit dem EXEC Binding versuchen.

Re: Monitor an anderem Rechner(Linux) aufwecken

Verfasst: 27. Jul 2023 17:15
von udo1toni
Darauf wird es hinauslaufen...
Notwendige Schritte:
  1. Auf dem Rechner mit HABPanel brauchst Du einen User, der den Befehl nutzen darf.
  2. auf openHAB-Seite musst Du ein bash-Script erstellen, welches den Befehl sendet
  3. Das bash-Script muss ausführbar sein und der User openhab muss berechtigt sein, das Script auszuführen
  4. Das Script muss per exec Binding aufgerufen werden
  5. Der exakte Befehl zum Aufruf des Scripts muss in der Whitelist eingetragen werden
Man kann das script "dumm" so gestalten:
Script unter dem Namen wakePanel.sh im Verzeichnis /usr/local/bin/ speichern:

Code: Alles auswählen

#!/usr/bin/bash
sshpass meinSupergeheimesPasswort ssh habpaneluser@habpanel-rechner -c xset dpms force on
Das Script ausführbar machen:

Code: Alles auswählen

sudo chmod 755 /usr/local/bin/wakePanel.sh
und dann passend ein exec Thing anlegen sowie den notwendigen Aufruf in der whitelist eintragen.

Allerdings steht somit meinSupergeheimesPasswort im Klartext in der Datei, und schlimmer noch, es ist auch möglich, diverse andere BEfehle auszuführen, wenn man erst mal das Passwort hat.

Die "bessere" Option des Login ist, asymetrische Schlüssel zu verwenden. Man erzeugt per ssh-keygen ein Schlüsselpaar für den User auf dem HABPanel Rechner, anschließend fügt man den erzeugten Public Key in die Liste der erlaubten Schlüssel (Inhalt der Datei auf dem HABPanel Rechner Im Userverzeichnis unterhalb ~/.ssh/ in die Datei authorized_keys einfügen)
Nun kann man den Private Key im home-Verzeichnis des Users openhab (auf dem openHAB System) in einen Ordner ~/.ssh/ ablegen. Da das Verzeichnis gewöhnlich nicht existiert, müssen wir es anlegen. Das Verzeichnis darf nur für den User openHAB verwendbar sein, das bedeutet, die Rechte müssen auf 700 gesetzt werden.
Nun reicht es im Script, einen Verweis auf den private Key anzugeben:

Code: Alles auswählen

#!/usr/bin/bash
ssh habpaneluser@habpanel-rechner -i id_rsa -c xset dpms force on
und wir fühlen uns gleich eine ganze Ecke sicherer. Zugriff ist nun nur möglich, wenn jemand in Besitz des Private Keys ist.

Die "saubere" Lösung ist eine Ecke aufwändiger, ein exaktes HowTo müsste ich auch erst mal wieder zusammensuchen, sie sieht aber so aus, dass man auf dem Zielsystem (eben dem HABPanel Rechner) einen eigenen User anlegt. Dieser User darf überhaupt nichts, außer, über ssh ganz bestimmte (exakt festgelegte) Befehle auszuführen.
Man kann dann über die authorized keys definieren, dass beim Login automatisch ein Script gestartet wird, welches den übergebenen Befehl entgegen nimmt. Ist der Befehl in dem Script definiert, wird der verknüpfte Befehl ausgeführt. Ansonsten gibt es halt einen Logeintrag über einen Loginversuch mit verbotenem Kommando.
Ich habe das schon mal realisiert, und zwar im Zusammenhang mit dem automatischen Backup einer Datenbank, letztlich ist es gar nicht soooo kompliziert, aber hier vielleicht doch overkill.
Die Schlüssel sind aber definitiv dem Schummelbefehl sshpass vorzuziehen :) auch wenn sshpass sehr verlockend ist. Es gibt schon Gründe, warum ssh selbst keine Option vorsieht, das Passwort über ein Script zu übergeben.

Re: Monitor an anderem Rechner(Linux) aufwecken

Verfasst: 27. Jul 2023 20:06
von ollis112
Hallo Udo,

sehr ausführlich wie immer von Dir. Vielen Dank.
Dann werde ich mich mal dran machen.
Kann allerdings etwas dauern.
Ich werde berichten.

Re: Monitor an anderem Rechner(Linux) aufwecken

Verfasst: 6. Aug 2023 13:27
von ollis112
So,
habe jetzt viel getestet, aber habe es nicht geschaft.
Bin aber soweit, dass ich auf dem Rechner worauf Openhab läuft,
nur auf der Konsole den Befehl" panelon.sh" eingeben muss, und schon geht der Monitor am Habpanelrechner an.
Wie schaffe ich es jetzt, das mit der Exec-Bindung zu steuern?
Genügt der Befehl, oder was muss ich noch beachten?
Habe im Thing den Befehl so eingegeben und in die Whitelist eingetragen.
Aber beim ansteuern des INPUT-Item passiert nichts??

Re: Monitor an anderem Rechner(Linux) aufwecken

Verfasst: 6. Aug 2023 14:37
von udo1toni
Das Minimum für ein funktionierendes exec Thing wäre vermutlich

Code: Alles auswählen

UID: exec:command:test
label: Befehl
thingTypeUID: exec:command
configuration:
  transform: REGEX((.*))
  interval: 0
  autorun: true
  command: /bin/bash panelon.sh %2$s
  timeout: 15
wobei man allerdings vermutlich auch noch den absoluten Pfad zu panelson.sh angeben müsste.
autorun: true sorgt dafür, dass beim Update des input Channels der Befehl ausgeführt wird. Dabei landet der an den input channel gesendete Befehl in %2$s, wird also als PArameter an das Script übergeben.
In der Whitelist muss exakt der Term hinter dem Doppelpunkt stehen (allerdings ohne das führende Leerzeichen).

Re: Monitor an anderem Rechner(Linux) aufwecken

Verfasst: 6. Aug 2023 15:22
von ollis112
So sieht mein Item und mein Thing aus

Aber es funktioniert leider nicht...

Re: Monitor an anderem Rechner(Linux) aufwecken

Verfasst: 6. Aug 2023 16:20
von udo1toni
Bitte vermeide Screenshots, zum Teilen der Konfiguration gibt es die Codeanzeige, den Code kannst Du hier im Forum einfach als Text einfügen (aber bitte unbedingt auch als Code markieren, da der verwendete Code (yaml) Einrückungen verwendet, die hier in der Anzeige entfernt werden, wenn der Code als normaler Text gepostet wird.

Re: Monitor an anderem Rechner(Linux) aufwecken

Verfasst: 6. Aug 2023 16:23
von udo1toni
Stelle bitte das Profile auf Standard. Das Profile hat nichts mit dem verwendeten Binding zu tun, über das Profile kann man den Status eines Items (oder auch die Befehlsseite, also In/Out zwischen Channel und Item) über verschiedene Optionen manipulieren, hier z.B. über ein Script. Das willst Du hier aber nicht tun...

Re: Monitor an anderem Rechner(Linux) aufwecken

Verfasst: 6. Aug 2023 19:04
von mad-mike
Moin,

Ich habe 2 wege erfolgreich ausgeführt:

Bitte nicht steinigen :oops: :mrgreen:
Weg nummer 1 ist direkt:
Im EXEC Thing den Befehl direkt eingeben und gleichen Befehl auch in die White list.
Hier mein Beispiel...

Code: Alles auswählen

sshpass -p habopen ssh -tt -p 8101 -o StrictHostKeyChecking=no openhab@localhost bundle:restart org.openhab.io.openhabcloud

und Nummer 2 habe ich auch über das Script erledigt:
EXEC Thing Befehl:

Code: Alles auswählen

/etc/openhab/scripts/restart.sh
Hier musste auch in die Whitelist exakt dieser Befehl eingetragen werden.
Und in dieser restart.sh der ausführende Befehle.




Schmeisst dein Log denn eine Fehlermeldung bei Ausführung vom EXEC Befehl??

ein

Code: Alles auswählen

 /bin/bash
oder
musste ich in meinem Fall nicht im EXEC Thing eintragen...