SSH Plugin Alternativen, private Key Funktion und osascript

  • Ich komme gerade mit meinen Gedankengängen und meinen Kenntnissen an meine Grenzen. :S


    Aktuell nutze ich das Plugin homebridge-ssh um meinen Bildschirmschoner am Mac an/aus zu schalten.

    Das Plugin musste ich irgendwann mal auf einen Pi Zero mit Node 11.x umziehen, da es auf der Haupt-Homebridge mit aktueller Node 12.x nicht mehr funktioniert. Das Plugin ist in die Jahre gekommen und wird nicht weiter entwickelt.

    Problem mit dem Pi Zero ist, dass er von der Performance nicht besonders fix ist. Bis der Bildschirmschoner ein/aus geschaltet wurde meint Siri aufgrund eines Time-out, dass das Gerät nicht reagiert. Das ist natürlich nervig und war "früher" auf dem "großen" Pi kein Problem.



    So viel zur Vorgeschichte.


    Jetzt suche ich nach einer Alternative für das Plugin, was aber natürlich das gleiche kann. an/aus/status und einfach per shh ohne Key. Nur Name und Passwort.


    Daher dachte ich an homebridge-cmd4 , hab aber keine Ahnung davon und ob das überhaupt geht. Wenn ja wie? Wenn nein, welche Alternative?


    Für Ideen, oder Hilfe bin ich dankbar. :)

    Hilfreich?

  • Dankeschön. Als Ergänzung, nicht verkehrt.

    Aber für HomeKit Integration in Szenen usw. noch nicht ganz so smooth für meine Zwecke wie das mit dem Plugin war/ist.

    Hilfreich?

  • einfach per shh ohne Key. Nur Name und Passwort.

    Nö. Das willst du nicht. Du brauchst den Key zwingend, ansonsten können Plugins wie homebridge-cmdWHATEVER nicht per ssh auf deinen Mac zugreifen. Ich helfe dir gern mit dem Key. Ist nicht so schwierig.


    Dazu muss ich wissen, wie deine Homebridge läuft. Dazu reicht mir auf dem Raspi erstmal ein

    ps aux | grep homebridge

  • Ich hatte fast gehofft, dass Du um die Ecke kommst. :saint:

    Danke für Dein Angebot der Hilfe. Darauf komme ich dann sicherlich gerne zurück.


    Aber ist das SSH Beispiel überhaupt mit dem cmd4 Plugin machbar?

    Das ssh Plugin nutzt keinen Key. I know, wahrscheinlich ist das ganz schlecht und unsicher? 8)

    Hilfreich?

  • Ich hatte fast gehofft, dass Du um die Ecke kommst. :saint:

    Danke für Dein Angebot der Hilfe. Darauf komme ich dann sicherlich gerne zurück.


    Aber ist das SSH Beispiel überhaupt mit dem cmd4 Plugin machbar?

    Das ssh Plugin nutzt keinen Key. I know, wahrscheinlich ist das ganz schlecht und unsicher? 8)

    Dürfte ich mich hier anhängen? Ich habe erst vor einigen Tagen das ssh-Plugin in Betrieb genommen. Aktuell nutze ich es mit user und Passwort, da ich das mit keyen auf dem Raspi ( mirror.os von glancr) nicht hinbekommen habe - vermutlich ist das ubuntu und es wurden mir die Befehle, um den key zu kopieren verwehrt.

  • Aber ist das SSH Beispiel überhaupt mit dem cmd4 Plugin machbar?

    Ja, ich mach's selbst so.

    Das ssh Plugin nutzt keinen Key. I know, wahrscheinlich ist das ganz schlecht und unsicher?

    Nein, aber es geht besser ;)

  • vermutlich ist das ubuntu und es wurden mir die Befehle, um den key zu kopieren verwehrt.

    So was aber auch. ich muss jetzt zu meiner Band, und dann bauen wir das mal zusammen.

  • 🤘 Lets rock.. oder so. 😅


    Code
    pi@raspberrypi-3BPlus:~ $ ps aux | grep homebridge
    root       879  0.0  0.3   7288  2888 pts/0    S+   Mai21   0:00 sudo journalctl -f -u homebridge-2nd-Instance
    root       892  0.0  0.9  44016  8888 pts/0    S+   Mai21   0:01 journalctl -f -u homebridge-2nd-Instance
    pi       20236  0.3  7.2 165416 68900 ?        Ssl  12:01   0:38 homebridge-config-ui-x
    pi       20278  1.9  7.9 177244 75196 ?        Ssl  12:01   3:58 homebridge
    pi       20312  0.4  7.9 236200 75224 ?        Sl   12:01   0:48 homebridge-config-ui-x
    pi       21516  8.4 30.8 392836 292836 ?       Ssl  Mai23 193:01 homebridge
    pi       22521  0.0  0.0   4368   544 pts/1    S+   15:22   0:00 grep --color=auto homebridge

    cmd4 soll auf der zweiten Instanz laufen. homebridge-2nd-Instance

    /var/homebridge-2nd-Instance


    Und sehe ich dann auch den Status wie derzeit mit ssh Plugin wenn der Screensaver bereits an, oder aus ist wenn er manuell gestartet wurde?


    Und wenn das mit dem Key-Dingens doch nix ist, kann ich auch weiterhin ohne Key das alte ssh Plugin nutzen? So für den Fall der Fälle, falls mir das alles zu dramatisch wird. 😱 🤣

    Hilfreich?

  • Ich habe es so gelöst:

    Code
            {
                "accessory": "CmdTriggerSwitch",
                "name": "Antenne 80er (Mac)",
                "stateful": true,
                "onCmd": "sudo ssh [email protected] /Users/det/speaker.sh antenne80 start",
                "offCmd": "sudo ssh [email protected] /Users/det/speaker.sh antenne80 stop"
            },

    Der user meldet sich per ssh am MAC an und startet in diese Fall ein Script

    das sollte auch mit osascript funktionieren.

    Damit das ohne Passwort funktioniert muss zwingend eine ssh Key erstellt und importiert werden.

    siehe hier

    https://blog.botfrei.de/2013/03/ssh-auto-login/

  • Wie man die passenden Keys oder Schlüssel erstellt.


    Als erstes mal Grundsätzliches. Es gibt immer einen privaten Schlüssel und einen öffentlichen Schlüssel. Den privaten muss man für sich behalten, er ist sozusagen der Geheimnisträger. Der öffentliche Schlüssel kann jedermann zugänglich gemacht werden.


    Ganz wichtig: der private Schlüssel befindet sich auf dem Computer, von dem aus man sich auf einen anderen Computer einloggen will. Der öffentliche Schlüssel befindet sich auf dem Computer, auf den man sich einloggen will. Beispiele:

    • Du willst dich von deinem Mac aus auf deinen Raspi einloggen. Dazu erstellst du ein Schlüsselpaar (bestehend aus privatem und öffentlichem Schlüssel) auf deinem Mac. Den öffentlichen Schlüssel kopierst du an eine bestimmte Stelle auf deinem Raspi. Der private Key bleibt da, wo er ist, nämlich auf dem Mac.
    • Du willst dich von deinem Raspi über das Internet auf meinen Mac einloggen (und wir tun mal so, als wäre das einfach so möglich). Dazu erstellst du ein Schlüsselpaar auf deinem Raspi und sendest mir den öffentlichen Schlüssel per Mail, WhatsApp, Telegram, SMS oder sonstwie in Textform. Ich kopiere deinen öffentlichen Schlüssel auf meinem Mac an eine bestimmte Stelle.

    Klar? Schlüsselpaar erstellen und öffentlichen Schlüssel auf die Zielmaschine bringen. Das ist alles. Und wie macht man das jetzt?


    Du willst dich von deinem Raspi auf deinen Mac einloggen. Also erstellst du auf deinem Raspi ein Schlüsselpaar - aber nur, wenn du noch keins hast! Die Schlüssel befinden bei DJay im Verzeichnis des Users pi (das habe ich aus der Prozessliste abgelesen, die du oben veröffentlicht hast: deine Homebridge wird vom User pi gestartet). Ob man schon Schlüssel hat, kann man nachsehen, indem man den Inhalt des Verzeichnisses .ssh auflistet.


    ls -l .ssh


    Und dabei könnte sowas dabei herauskommen:

    -rw------- 1 pi pi 1015 Sep 27 2019 authorized_keys

    -rw------- 1 pi pi 1811 Sep 27 2019 id_rsa

    -rw------- 1 pi pi 391 Sep 27 2019 id_rsa.pub

    -rw------- 1 pi pi 2797 Feb 13 11:12 known_hosts


    Der private Schlüssel ist in der Datei id_rsa gespeichert. Der öffentliche Schlüssel befindet sich in id_rsa.pub. Die anderen beiden Dateien gehören nicht zum Schlüssel, aber der Ordnung halber: in der Datei authorized_keys befinden sich die öffentlichen Schlüssel von anderen Leuten und in known_hosts befinden sich die Adressen von Computern, zu denen man per ssh und Schlüssel Kontakt hatte.


    Wenn kein Schlüsselpaar existiert, muss man ein neues erstellen. Wenn eins existiert, sollte man das verwenden. Existierende Schlüsselpaare zu überschreiben kann hässliche Folgen haben und sollte nur dann gemacht werden, wenn man sich sicher ist, dass die nicht irgendwo in Gebrauch sind.


    Also, auf deinem Raspi geht es los:

    ssh-keygen


    Generating public/private rsa key pair.

    Enter file in which to save the key (/home/pi/.ssh/id_rsa):

    Created directory '/home/pi/.ssh'.

    Enter passphrase (empty for no passphrase):

    Enter same passphrase again:

    Your identification has been saved in /home/pi/.ssh/id_rsa.

    Your public key has been saved in /home/pi/.ssh/id_rsa.pub.

    The key fingerprint is:

    SHA256:LZ2HWPgyZlbNVdOv5U/NqJBwG8/AT92eJNiZuJzjR40 pi@raspberrypi

    The key's randomart image is:

    +---[RSA 2048]----+

    | .oo|

    | . o . o|

    | ..o *.o..|

    | .B==.=..+|

    | SoBX+ =Bo|

    | + ++*+Eoo*|

    | ..o. ..|

    | ... .|

    | . |

    +----[SHA256]-----+


    Die Schlüsselgenerierung fragt dich nach dem Namen, die die Schlüssel haben sollen und nach dem Passwort, den der Schlüssel haben soll. Du gibst überall nichts ein und drückst einfach die Entertaste.


    Das war der erste Schritt. Die Schlüssel sind erstellt. Nun muss noch der öffentliche Schlüssel auf den Mac. Dazu gibt es den Befehl ssh-copy-id, der ergänzt werden muss durch die IP-Adresse des Mac und den Usernamen des Users, der später den Scvreensaver steuern soll. Wahrscheinlich ist es dein eigener Account auf dem Mac. Also:


    ssh-copy-id [email protected] (du setzt hier natürlich die passenden Werte ein)


    /usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/home/pi/.ssh/id_rsa.pub"

    The authenticity of host 192.168.178.20 can't be established.

    ECDSA key fingerprint is SHA256:WEElPAtwb1dkEA5mj8GHKZTsYoYdZd9kGJIsArGJJng.

    Are you sure you want to continue connecting (yes/no)? yes

    /usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed

    /usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys

    Password:


    Number of key(s) added: 1


    Now try logging into the machine, with: "ssh '[email protected]'"

    and check to make sure that only the key(s) you wanted were added.


    Bitte beachte, dass dieser Prozess möglicherweise die Eingabe des Wortes yes verlangt. Wahrscheinlich passiert das bei dir nicht, aber das ist egal. Falls die Frage Are you sure you want to continue connecting (yes/no)? kommt: yes. Das ganze Wort. Auf jeden Fall musst du danach das Passwort eingeben, das der User djay auf dem Mac zum Einloggen verwendet.


    Und fertig.


    Zeit zum Testen:

    ssh [email protected]

    und zack!, du solltest auf dem Mac eingeloggt sein, ohne ein Password angeben zu haben. Mit logout wieder ausloggen und deinen Screensaver-Befehl testen:

    ssh [email protected] osascript -e 'tell application "ScreenSaverEngine" to run'

    und zack! geht's Licht aus. Sollte jedenfalls, ich kann's nicht ausprobieren.


    Auf dem Mac ist nun übrigens ein Verzeichnis entstanden. Du kannst es dir nach dem Einloggen auf den Mac anzeigen lassen mit ls -l .ssh. Dort befindet sich eine Datei namens authorized_keys, und die enthält den öffentlichen Schlüssel, den du auf dem Raspi erstellt hast.


    So, ganz zum Ende noch der folgende wichtige Hinweis: so wie ich das beschrieben habe, funktioniert das (hoffentlich) bei DJay . Das funktioniert so nicht, wenn man die Homebridge nach der Forenanleitung aufgesetzt hat. Hier muss man, bevor man die Schlüssel erstellt, noch einen weiteren Befehl eingeben:


    sudo su - homebridge und erst dann ssh-keygen und den ganzen Rest.

  • Hahaaaa... Es ist immer wieder ein befriedigendes Erlebnis Deinen Anleitung blind zu folgen mit der Gewissheit, es wird schon! Und es wurde schon! :love:

    Vielen Dank!

    Alles wie beschrieben abgelaufen und sogar verstanden. :)💡


    Lediglich das mit dem Bildschirmschoner funktioniert noch nicht aus der command line.


    Code
    pi@raspberrypi-3BPlus:~ $ ssh [email protected] osascript -e 'tell application "ScreenSaverEngine" to run'
    4:4: syntax error: Ausdruck erwartet, aber Skriptende gefunden. (-2741)


    Und wie pack ich das ins cmd4 Plugin Format?

    Mit der "Anleitung" dort, bin ich überfordert. It's a lot!

    https://github.com/ztalbot2000…master/Extras/config.json =O

    Hilfreich?

  • Lediglich das mit dem Bildschirmschoner funktioniert noch nicht aus der command line.

    Stimmt. Versuch's mal so:

    ssh [email protected] "osascript -e 'tell application \"ScreenSaverEngine\" to run'"

  • Und wie pack ich das ins cmd4 Plugin Format?

    Muss es denn so kompliziert sein? Kannst du es nicht mit https://www.npmjs.com/package/homebridge-cmdtrigger machen oder https://www.npmjs.com/package/homebridge-cmd?

  • Von mir aus muss es gar nicht kompliziert sein. Hauptsache das Plugin der Wahl funktioniert mit node >12.x und ist mehr oder weniger aktuell.

    Ich war mit dem SSH Plugin zufrieden und es hat seinen job getan, bis eben es outdated war und nicht mehr mit aktueller Node LTS lief.


    Ich hab zwei Anwendungsbeispiele die ich derzeit per SSH Plugin laufen habe, die ich gerne mit einem anderen Plugin was Du vorschlägst umsetzen möchte, wieder auf Haupt-Pi und aktueller node.

    Was schlägst Du vor?


    Hilfreich?

  • Ich sehe gerade, dass ich sogar https://github.com/luisiam/homebridge-cmdswitch2 installiert habe für einen anderen Fall.

    Geht ssh an/aus/status auch damit? :/


    Ich hab das für den Wasserkocher bisher genutzt.




    So.. oder so ähnlich... Aber da stimmen " und ' so gar nicht bei on off und state cmd 🙈




    Code
    pi@raspberrypi-3BPlus:~ $ ssh [email protected] "osascript -e 'tell application \"System Events\" to get running of screen saver preferences'"
    false

    Hilfreich?

  • "on_cmd": ssh [email protected] "osascript -e 'tell application \"ScreenSaverEngine\" to run'",

    Das Plugin will den Befehl mochmal in "

    Code
    "on_cmd": "ssh [email protected] "osascript -e 'tell application \"ScreenSaverEngine\" to run'"",

    ob es geht musst Du probieren, ich lasse da dann ein script starten bs_on.sh


    nano

    Code
    on_cmd": "/home/pi/bs_on.sh"

    nano /home/pi/bs_on.sh

    chmod 755 /home/pi/bs_on.sh

    bs_on.sh

    Bash
    #!/bin/bash
    ssh [email protected] "osascript -e 'tell application \"ScreenSaverEngine\" to run'"

    state kann frei bleiben (zur Not)


    so ungefähr könnte es man machen

  • Hmm... Dank Dir. Das akzeptiert die json leider auch nicht.

    Code
    "on_cmd": "ssh [email protected] "osascript -e 'tell application \"ScreenSaverEngine\" to run'"",

    script wäre wohl auch noch ne Option.

    State wäre schon schön weiter zu haben.

    Hilfreich?

  • Das mit den scripten sowohl für Bildschirmschoner an/aus als auch iMac Homebridge load/unload hat funktioniert.

    Reagiert endlich wieder prompt in dem Moment wo ich den Schalter in der Eve App dafür umlege. 🙏


    Allerdings würde ich mir den "state" von Bildschirmschoner schon wieder wünschen. :S

    Also wen der Bildschirmschoner von selbst startet am iMac oder von mir gestartet wird, dass das zu HomeKit reflektiert wird.

    Auslesen geht ja grundsätzlich irgendwie ..


    Code
    pi@raspberrypi-3BPlus:~ $ ssh [email protected] "osascript -e 'tell application \"System Events\" to get running of screen saver preferences'"
    false


    Ist da noch eine Lösung für mich und mein Wunschkonzert? :saint:

    Hilfreich?