Linuxbefehl aus FHEM heraus funktioniert nicht

Begonnen von ujaudio, 11 September 2015, 11:24:38

Vorheriges Thema - Nächstes Thema

ujaudio

Wenn ich auf meinem Linux-PC ein Terminal habe, dann kann ich den Befehl
ssh root@192.168.178.47 shutdown -h now
ausführen.
Wenn ich das aus FHEM heraus machen möchte, dann schreibe ich in die Kommandozeile
{system ('ssh root@192.168.178.47 shutdown -h now')}
Der Rückgabewert ist -1 und im Logfile steht
Host key verification failed.

Worin besteht denn da der Unterschied und was muss ich tun, um es zum Erfolg zu führen? Eine Idee hätte ich: Aus dem Terminalfenster heraus bin ich ja als "pi" angemeldet, der user aus FHEM heraus ist aber ein anderer. Wenn es daran liegt: wie löse ich den Konflikt auf?
Einen lieben Gruß
Jürgen

marvin78

Vermutlich machst du ersteres mit dem User root und das zweite macht der User FHEM. Dieser ist aber auf dem entsprechenden Server nicht authorisiert. Du musst den entsprechenden Key mit dem user FHEM übertragen.

Falls es an den Grundlagen hapert, bitte etwas googlen. Zum ssh mit Keys und Schlüsselaustausch findest du im Netz gefühlt Millionen gute Tipps. Im Übrigen wurde das Thema auch hier im Forum schon mehrfach behandelt.

ujaudio

#2
Ich mache ersteres mit dem user "pi" und das zweite macht der user "FHEM" - insofern war also meine Vermutung schon in die richtige Richtung. Wenn ich es mit dem user "FHEM" mache, dann muss ich mich als solcher anmelden, ich denke das bekomme ich hin.
Ich habe übrigens aufgrund der Beiträge hier im Forum, das mit dem ssh und Schlüsselaustausch bei mir nun angewandt - klar google ich bevor ich frage und habe mittlerweile auch einen deutlich höheren Erfolgsfaktor aufgrund "besserer" Suchanfragen. Aber manchmal hilft mir das halt leider auch nicht.

Die Aufgabenstellung und die Lösung mal hier kompakt:
FHEM soll einen Befehl im Betriebssystem ausführen:
{system['<Linuxbefehl>'}
Das ist an sich kein Problem, aber wenn der Befehl lautet, sich via ssh mit bekanntem Schlüsselaustausch in ein weiteres System einzuloggen, dann muss FHEM und damit der user "fhem" den Schlüsselaustausch machen!
Beim Raspberry geht das dann so, wobei vorausgesetzt ist, dass man schon eingeloggt ist, was normalerweise der user "pi" ist:
#zuerst sicherstellen, dass man sich als fhem problemlos einloggen kann:
sudo vi /etc/passwd
# dort zu der Zeile mit fhem gehen
# am Ende dieser Zeile /bin/false in /bin/bash ändern
# abspeichern und Editor (man kann auch einen anderen nehmen) verlassen

sudo su - fhem
# bitte alle Leerzeichen beachten!
# nun ist man als user fhem eingeloggt

ssh-keygen -t rsa
# danach 2x return eingeben
# der Schlüssel wird unter /opt/fhem/.ssh abgelegt

ssh-copy-id -i /opt/fhem/.ssh/id_rsa.pub <user>@<Zielrechner>
# kopiert den Schlüssel im Zielrechner an die richtige Stelle und man muss ein letztes Mal das Passwort für den Zielrechner eingeben
Einen lieben Gruß
Jürgen

Virsacer

Zitat von: ujaudio am 11 September 2015, 11:40:04
#zuerst sicherstellen, dass man sich als fhem problemlos einloggen kann:
sudo vi /etc/passwd
# dort zu der Zeile mit fhem gehen
# am Ende dieser Zeile /bin/false in /bin/bash ändern
# abspeichern und Editor (man kann auch einen anderen nehmen) verlassen

sudo su - fhem
# bitte alle Leerzeichen beachten!
# nun ist man als user fhem eingeloggt

ssh-keygen -t rsa
# danach 2x return eingeben
# der Schlüssel wird unter /opt/fhem/.ssh abgelegt

ssh-copy-id -i /opt/fhem/.ssh/id_rsa.pub <user>@<Zielrechner>
# kopiert den Schlüssel im Zielrechner an die richtige Stelle und man muss ein letztes Mal das Passwort für den Zielrechner eingeben

Der User fhem braucht keine bash :o Du willst dich ja nicht als fhem einloggen...
Er braucht lediglich einen Key in seinem "Benutzerordner" und der kann auch deutich einfacher da erstellt/hinkopiert werden ;)

ujaudio

Zitat von: Virsacer am 11 September 2015, 13:33:47
Der User fhem braucht keine bash :o Du willst dich ja nicht als fhem einloggen...
Er braucht lediglich einen Key in seinem "Benutzerordner" und der kann auch deutich einfacher da erstellt/hinkopiert werden ;)

Dieser Eintrag ist nur notwendig, damit das Kommando
sudo su - fhem
funktioniert - das habe ich in einem anderen Thread hier in diesem Forum gefunden.

Warum ist eigentlich das fhem-Passwort nicht bekannt??!?
Einen lieben Gruß
Jürgen

CoolTux

Wenn Du bis heute Abend warten kannst kann ich Dir was fertiges zeigen. Ich verwende ein FHEM at um mein Firewall Script entsprechend laufen zu lassen damit z.B. WhatsApp für meine Tochter nach 21 Uhr gesperrt wird.

Grüße
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

Prof. Dr. Peter Henning

Hm, als Medienpädagoge runzele ich die Stirn.

Entweder ist die Tochter schon 16, dann sollte sie so vernünftig sein, das nach einem Gespräch zu lassen.
Oder sie ist noch keine 16, dann ist das ein Verstoß gegen die Nutzungsbedingungen von WhatsApp.

LG

pah

CoolTux

Sie ist 13, und glaube mir ohne WhatsApp bist Du in ner 7 Klasse abgeschirmt. Nutzungsbedingungen hin oder her. Bin auch nicht begeistert. Aber leider werden alle Infos über Klassenchats verteilt.


Grüße
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

Prof. Dr. Peter Henning

Ich habe das ja nicht leichtfertig geschrieben: Gerade bei WhatsApp wird unter den Schülern extrem viel Missbrauch getrieben, auch deren Nutzungsbedingungen sind nicht leichtfertig so entstanden.

Dass Klasseninfos darüber verteilt werden, ist mit Sicherheit ein Verstoß gegen die Datenschutzbestimmungen des betreffenden Kultusministeriums.

LG

pah

ujaudio

Zitat von: CoolTux am 11 September 2015, 15:57:55
Wenn Du bis heute Abend warten kannst kann ich Dir was fertiges zeigen. Ich verwende ein FHEM at um mein Firewall Script entsprechend laufen zu lassen damit z.B. WhatsApp für meine Tochter nach 21 Uhr gesperrt wird.

Grüße

Na, das ist ein Angebot...
Einen lieben Gruß
Jürgen

Virsacer

Zitat von: ujaudio am 11 September 2015, 15:43:54
Dieser Eintrag ist nur notwendig, damit das Kommando
sudo su - fhem
funktioniert - das habe ich in einem anderen Thread hier in diesem Forum gefunden.
Ja, aber der Befehl ist auch unnötig...
Du loggst dich ja unter Windows auch nicht als "TrustedInstaller" ein, wenn du ne Textdatei im Programme-Ordner erstellen willst ;)
Also

sudo ssh-keygen -f /opt/fhem/.ssh/id_rsa
sudo chown fhem /opt/fhem/.ssh -R

reicht aus ;)

Zitat von: ujaudio am 11 September 2015, 15:43:54
Warum ist eigentlich das fhem-Passwort nicht bekannt??!?
Weil es keins gibt...

CoolTux

So da wären wir.

Fangen wir an. Ich beschreibe Dir am besten wie ich es gemacht habe und Du entscheidest was Du übernimmst oder nicht.
Ich habe als erstes einen User auf dem remote system angelegt. Username cmdremote ohne passwort mit sh shell


useradd -s /bin/sh -d /home/cmdremote -m cmdremote


Im Homeverzeichnis von cmdremote kommt unter .ssh der private Schlüssel.
Danach habe ich dem User auf dem System entsprechend dem was er machen soll sudo Rechte gegeben.

meine /etc/sudoers


cmdremote       ALL = NOPASSWD: /etc/iptables/rules.scripts/isabel_handy.sh, /etc/iptables/rules.scripts/ssh_inbound_inet.sh, /etc/iptables/rules.scripts/fhem_inbound_inet.sh


Hier trägst Du halt /sbin/shutdown oder so ein oder gibst ihm alle rechte der welt wenn es dir egal ist
Fertig,

Nun zum fhem System.

Lege unter /opt/fhem/ ein Verzeichnis .ssh an. Hier kommt der öffentliche Schlüssel rein. Ausserdem legst Du eine Datei an namens config in der Du folgendes einträgst


Host mirdochegal
        Hostname ip zielrechner
        User cmdremote
        IdentityFile /opt/fhem/.ssh/id_rsa
        Port 22
        ServerAliveInterval 30
        ServerAliveCountMax 120


danach einfach mal testen ob du überhaupt rauf kommst. also mittels


su -s /bin/bash -c 'ssh mirdochegal' fhem


Wenn Du nun in eine shell auf dem zielsystem landest hast du es geschaft.

In fhem selbst schreibst du einfach ein


{ system("ssh proxy01 'sudo /etc/iptables/rules.scripts/isabel_handy.sh allow'") }
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

ujaudio

Danke Virsacer und CoolTux.

Das mit dem sudoer muss ich in Ruhe auf meinem Testsystem ausprobieren, da habe ich mir schon mal massive Probleme eingehandelt, weil ich trotz größter (aber eben nicht ausreichender) Sorgfalt mir das System kaputt gemacht habe. Naja, ich konnte es wieder reparieren, aber das dauerte... Mittlerweile muss mein Livesystem einfach funktionieren, sonst bekomme ich Ärger mit meiner besseren Hälfte  ;) Ist ja auch blöd, wenn Wecker, Rollladen, Dunstabzugshaube, Badezimmerlüfter, Lampen, Stereoanlage und einiges mehr nicht mehr funktioniert.
Einen lieben Gruß
Jürgen

Virsacer

Zitat von: CoolTux am 11 September 2015, 21:45:10
Im Homeverzeichnis von cmdremote kommt unter .ssh der private Schlüssel.
Zitat von: CoolTux am 11 September 2015, 21:45:10
Lege unter /opt/fhem/ ein Verzeichnis .ssh an. Hier kommt der öffentliche Schlüssel rein.

Ich geh mal davon aus, dass du es richtig gemacht hast, aber fürs Protokoll:
Im Benutzerverzeichnis von fhem ist der private Schlüssel und auf dem Remotesystem der Öffentliche.

CoolTux

nicht ganz. Denn du verbindest dich ja vom fhem zum remote. du benutzt den user des remotesystems, also kommt der private auf dem remote und der öffentliche auf dem fhem.
du schickst ja deinem kumpel der remote auf dein system soll auch nicht deinen privaten.



gruß
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net