Linux-Rechner per SSH-Befehlen über Node-RED fernsteuern

IM EINSATZ?

Dann schau dir UNSEREN LOXKURS an und profitiere von unserem Wissen!

Aktuell bin ich dabei alle bisher per FHEM eingebundenen Smart-Home-Geräte zu Node-RED umzuziehen. Dazu gehört auch das auf Linux basierende QNAP NAS, welches über SSH-Befehle ferngesteuert werden kann und damit bspw. abends automatisch heruntergefahren wird, sobald niemand mehr auf die dort beheimatete Plex Bibliothek zugreift. Das Node-RED-System muss sich dabei per SSH auf dem linuxbasierten QNAP einloggen und entsprechende Befehle absetzen.

Wie diese Einrichtung im Detail funktioniert und wie die weitere Einbindung in Smart-Home-Szeanrien in meinem Fall aussieht, ist Inhalt des nachfolgenden Blogpost.

SSH-Login beim Remote-Rechner testen

Grundvoraussetzung ist natürlich erstmal, dass der “normale” SSH-Login auf dem Remote-Rechner funktioniert. Im Fall des QNAP TVS-1282 (Affiliate-Link) lässt sich das einfach mit dem nachfolgenden Terminal-Befehl testen:

ssh admin@QNAP-IP

QNAP-IP muss dabei natürlich durch die konkrete IP-Adresse ausgetauscht werden, in meinem Fall ist das NAS unter 192.168.3.9 erreichbar. Das im Anschluss abgefragte Passwort ist das selbe, welches für den Login in der QNAP-Weboberfläche (gewöhnlich unter Port 8080 erreichbar) vergeben wurde.

Hat der Login geklappt, sollte man direkt SSH-Befehle absetzen können. Im Fall des QNAP-NAS wird aber bei neueren Softwareversionen erstmal ein “Console Management” eingeblendet, welches beim späteren Remote-SSH-Zugriff stört bzw. das Absetzen der Befehle verhindert.

Um das Problem zu lösen, muss dieses Konsolen-Management-Userinterface dauerhaft deaktiviert werden, was ich kürzlich in diesem Blogpost detailliert erklärt habe.

Ist auf dem Remote-System alles startklar, kann die SSH-Verbindung erstmal wieder geschlossen werden.

Remote-SSH-Login auf dem Node-RED-System einrichten

Im Grunde braucht man natürlich nicht unbedingt ein Node-RED-System, um die SSH-Befehle in Richtung des remote zu steuernden Linux-Rechners zu schicken. Ein Linux-Rechner ohne Node-RED-Installation reicht natürlich aus. Aber Node-RED ist einfach super komfortabel und ausserdem kann ich dieses Setup jedem nur ans Herz legen, der alle seine Smart-Home-Geräte unter einer Oberfläche verwalten bzw. verknüpfen möchte.

So oder so erstmal per SSH auf diesem Linux-System einloggen. In meinem Fall handelt es sich um eine virtuelle Maschine (Proxmox) auf einem Intel NUC NUC8i3BEH (Affiliate-Link), auf welchem Raspberry Pi OS (externer Link) läuft.

Entsprechend erfolgt hier der Login mit dem pi-Benutzer:

ssh pi@Node-RED-IP

Das Standardpasswort beim Raspberry Pi OS lautet dabei schlicht “raspberry” (ohne Anführungszeichen).

Als nächstes wird ein Private/Public-Key-Paar generiert:

ssh-keygen -t rsa

Alle nachfolgenden Abfragen einfach per “Enter”-Taste bestätigen, sodass die Ausgabe in etwas so aussehen sollte:

Jetzt noch die Rechte der gerade erzeugten Dateien setzen:

sudo chmod 600 ~/.ssh/id_rsa && sudo chmod 600 ~/.ssh/id_rsa.pub

Der Public-Key des Node-RED-Rechners muss jetzt noch auf den Remote-Rechner übertragen werden, damit die Authentifizierung erfolgen kann. Dabei muss QNAP-IP natürlich mit der konkreten IP-Adresse des Remote-PCs ausgetauscht werden.

ssh-copy-id -i ~/.ssh/id_rsa.pub admin@QNAP-IP

Sobald er Befehl ausgeführt wird, efolgt vermutlich erstmal die Rückfrage, ob der Fingerprint akzeptiert werden soll. Hier einfach “yes” eintrippen (ohne Anführungszeichen).

Nun erfolgt noch die Passwortabfrage des Remote-Rechners. Entsprechendes Passwort eintragen und kurz warten. Sollte kein Fehler angezeigt werden, hat alles geklappt:

Entsprechend der Ausgabe lässt sich der Remote-Login aufs QNAP NAS (IP ist 192.168.3.9) jetzt direkt testen:

ssh 'admin@192.168.3.9'

Ohne Passworteingabe sollte jetzt direkt auf das Remote-System gewechselt werden. Funktioniert also! Die Remote-Verbindung lässt sich dann wieder mit der Eingabe von “exit” (ohne Anführungszeichen) beenden.

Remote-Rechner per Node-RED steuern

In Node-RED wird dann eine “exec”-Node dafür genutzt, um den Terminal-Befehl zu triggern:

Also erstmal im Suchfeld links oben nach “exec” suchen, die entsprechend Node in den Flow rechts ziehen und zum Öffnen der Details doppelt anklicken.

Als “Befehl” habe ich direkt mal “poweroff” genutzt, mit dem das QNAP-NAS heruntergefahren werden kann. Bei normalen Linux-Systemen kann der Befehl aber auch “shutdown -h now” lauten:

ssh admin@192.168.3.9 'poweroff'

Bei “Anfügen” wird der Haken bei “msg.payload” entfernt und die Einstellungen abschließend mit dem “Fertig”-Button gespeichert. Achso, ein “Name” kann natürlich vorher auch noch vergeben werden, in meinem Fall “Qi Shutdown”. Qi ist dabei schlicht das Kürzel meines QNAP-NAS.

Für einen ersten Test lässt sich der exec-Node dann eine inject-Node vorausstellen, welche einen Trigger setzt und entsprechend einen Shutdown des Remote-Rechners ausführen sollte.

Hier ein Ausschnitt meines Node-RED-Flows mit einigen Beispielen: Node-RED Flow (2083 Downloads )

Der jeweiliger Trigger kommt in meinem Fall übrigens direkt aus meinem Loxone-System, in welchem alle “Smart-Home-Fäden” zusammenlaufen. Hier erfolgen dann bspw. auch die Verknüpfungen der einzelnen Regeln, wann das NAS bpsw. hoch- und runtergefahren werden soll.

Die Logik in der Loxone Config sieht dann so aus:

Der rot markierte Merker überträgt dabei den in Loxone erzeugten Trigger für den Shutdown des QNAP-NAS an Node-RED, welches wiederum den SSH-Befehl absetzt. Node-RED setzte ich also bewusst nur als vermitteltende Plattform zwischen den Devices ein und lagere die komplette Logik in Loxone aus. Wie die Loxone-Logik dabei im Detail aussieht, ist Inhalt eines späteren Blogpost.

Vielleicht gibt es dazu auch noch mal einen eigenständigen Online-Kurs, in welchem die Einbindung aller meiner Multimedia-Devices gezeigt wird. Mal sehen…

5 Kommentare
  1. Hi Jörg,
    kannst Du bei Gelegenheit vielleicht mal die Unterschiede zwischen
    FHEM, Node-Red, Openhab, IOBroker, … beschreiben?
    Weshalb stellst Du auf Node-Red um?
    Was ist dabei zu beachten wenn unter FHEM diverse System wie z.B. homematic, zwave, enocean, phillips-hue … verwendet werden? Müssten z.B. homematic komponenten neu angelernt werden? Oder kann die HMID irgendwie übernommen werden?
    Beste Grüße
    Sammy

    1. Hi Sammy,
      einen umfangreichen Vergleich der von dir genannten Systeme kann ich vermutlich nicht liefern. Mit Openhab konnte ich mich nie wirklich anfreunden. Mit IOBroker habe ich noch icht viel Erfahrung gesammelt.

      Node-Red nutze ich vermehrt, da mir die grafische Komponente bei der Parametrierung auf einzelnen Seiten (Flows) (ähnlich wie bei Loxone) sehr gut gefällt. Außerdem ist eine neue Node (Funktionsbaustein) mit einem Klick installiert. Das System kümmert sich automatisch um alle Abhängigkeiten. Ebenso verhält es sich bei Updates. Bei FHEM ist das immer so ein intransparentes Konsolengefummel mit Trial and Error – zumindest für mich.

      Beim Wechsel von FHEM müssen eben die passendes Nodes (Homematic, etc.) in Node-Red über die “Palette” installiert und passend konfiguriert werden. Wie es im Detail aussieht bzgl. Anlernen etc., kann ich so spontan nicht sagen. Vermutlich stark davon abhängig, welche Hardware (insb. der HM-Zentrale) eingesetzt wird. Bei einem Wechsel würde ich das bisherige System auf jeden Fall erstmal intakt lassen, damit ich jederzeit zurückkehren kann.

      Viele Grüße
      Jörg

  2. Hallo
    Super geschrieben.
    Aber vielleicht kannst du mir bei einen Problem was ich damit habe weiter helfen.
    Ich wollte damit meinen Mac per SSH abschalten. Ich bekomme aber bei egal welchen Befehl den error:255 auf der exen node in Node-Red.
    So kann ich dazu nichts finden.

    1. Hi Michael,
      vermute spontan, dass irgendwas nicht bei der Syntax passt. Schreib doch mal, welchen Befehl du absetzen möchtest…

      Viele Grüße
      Jörg

  3. Kurze Frage zu node-red im Venus large os. Node-red 3.0 benutzt den Monaco Editor per default. Warum nicht in Venus Large OS und wie kann man das “nachrüsten”. In einer settings.js ist “monaco” als Editor hinterlegt
    Danke

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Das könnte dir auch gefallen