Home Assistant switch: per SSH auf anderem Host Sachen machen

Home Assistant auf Hassio auf einem Raspberry Pi ist ein wunderbares Stück Software und kann fast alles. Aber manchmal muss doch bisschen rumgefrickelt werden… hier mal ein Beispiel:

Ich möchte einen Rechner (A) in einem per VPN verbundenen Netz per wake-on-lan wecken und herunterfahren können. Wake-on-lan geht nicht über VPN (weil nicht IP), also folgender Gedanke: zum Wecken soll eine Verbindung mit Rechner (B) im gleichen Netz wie (A) hergestellt werden, der immer läuft. Dorthin SSH-login, um das Magic Packet an (A) abzusenden. Zum Herunterfahren von (A) dann dorthin direkt per SSH und Shutdown auslösen.

Problem: Home Assistant mit SSH-Keys versorgen damit der sich automatisch woanders einloggen und Sachen machen kann. Ich hab nach Blick auf https://community.home-assistant.io/t/protip-how-to-get-shell-in-actual-homeassistant-or-addon-container-when-using-hassio/48760 also erstmal SSH auf den Hassio-Host selbst auf dem beschriebenen Weg aktiviert.

Wenn das läuft, dort: docker exec -it $(docker ps -f name=homeassistant -q) bash

Von dort aus erst ssh-keygen benutzen und dann login zu den Rechnern A und B ermöglichen: ssh-copy-id commanduser@192.168.111.22_33 (bitte einen stark beschränkten Account nur für den jeweiligen Befehl auf den Zielsystemen anlegen, is klar oder?).

Wenn das soweit klappt, ist es nicht mehr weit… hier der Ausschnitt aus der Home Assistant configuration.yaml:

shell_command:
  wakeup_host: /usr/bin/ssh commanduser@192.168.111.22 'wakeonlan 10:1A:0C:41:42:A7'
  shutdown_host: /usr/bin/ssh commanduser@192.168.111.33 'sudo shutdown -h now'
  
binary_sensor:
  - platform: ping
    host: 192.168.111.22
    name: "host drueben"
    count: 1
    scan_interval: 10

switch:
  - platform: template
    switches:
      host_woanders:
        friendly_name: "Host da drüben"
        value_template: "{{ is_state('binary_sensor.host_drueben', 'on') }}"
        turn_on:
          service: shell_command.wakeup_host
        turn_off:
          service: shell_command.shutdown_host

Damit der Shutdown klappt, wird wahrscheinlich erforderlich sein, dem commanduser den Befehl sudo shutdown -h now auch ohne Passwort in der sudo-Konfiguration zu erlauben: commanduser ALL = NOPASSWD: /usr/sbin/shutdown

könnte dann so oder anders in Lovelace aussehen… Ein Schalter für an/aus, und der Rechner verhält sich so wie der Schalter es will <> der Schalter gibt den Zustand des Rechners wieder