NEWS
Blockly - exec Befehl mit ssh
-
Du solltest einen Debug-Block für result einfügen, um zu sehen, was zurück kommt. Wird ein richtiger Log-Eintrag erzeugt, dann liegt result als String vor und muss erst in eine Zahl gewandelt werden, um damit rechnen zu können.
-
Ich hoffe ich habe den debug Block richtig eingefügt:
-
1. Den Loglevel bei exec solltest Du auf keins stellen.
2. Den Loglevel bei debug output solltest Du auf info stellen.
3. Poste bitte den Javascript-Code (Zeige Code) ohne die letzte Zeile in Code tags, damit man sieht, welches Statement die Warnung erzeugt.
-
Habe die Loglevel mal umgestellt. Hier der Code aus dem Blockly:
var result; schedule("* * * * *", function () { exec('ssh dirk@192.168.40.6 cat /tmp/temp', function (error, result, stderr) { setState("javascript.0.scriptEnabled.UserDefined.Tests.Variable"/*Variable*/, (result / 100)); console.log(result); }); });
-
Was gibt das Log aus ?
Bitte keine eigenen Datenpunkte unter javascript.0.scriptEnabled anlegen, sondern direkt unter javascript.0.
-
Also mit den Einstellungen im Blockly sowie debug des javascript Adapters kommt das hier - lediglich die Warnung
javascript.0 2019-01-23 14:55:00.186 info script.js.UserDefined.Tests.Skript1: javascript.0 2019-01-23 14:55:00.186 info script.js.UserDefined.Tests.Skript1: setForeignState(id=javascript.0.TestVar, state=0) javascript.0 2019-01-23 14:55:00.186 warn at Process.ChildProcess._handle.onexit (internal/child_process.js:209:5) javascript.0 2019-01-23 14:55:00.186 warn at maybeClose (internal/child_process.js:915:16) javascript.0 2019-01-23 14:55:00.186 warn at ChildProcess.emit (events.js:214:7) javascript.0 2019-01-23 14:55:00.186 warn at emitTwo (events.js:126:13) javascript.0 2019-01-23 14:55:00.186 warn at ChildProcess.exithandler (child_process.js:288:5) javascript.0 2019-01-23 14:55:00.186 warn at script.js.UserDefined.Tests.Skript1:6:7 javascript.0 2019-01-23 14:55:00.185 warn Wrong type of javascript.0.TestVar: "number". Please fix, while deprecated and will not work in next versions. javascript.0 2019-01-23 14:55:00.123 info script.js.UserDefined.Tests.Skript1: exec: ssh dirk@192.168.40.6 cat /tmp/temp javascript.0 2019-01-23 14:54:37.100 info script.js.UserDefined.Tests.Skript1: registered 0 subscriptions and 1 schedule javascript.0 2019-01-23 14:54:37.100 info script.js.UserDefined.Tests.Skript1: schedule(cron=* * * * *) javascript.0 2019-01-23 14:54:37.100 info Start javascript script.js.UserDefined.Tests.Skript1 javascript.0 2019-01-23 14:54:35.179 info Stop script script.js.UserDefined.Tests.Skript1 javascript.0 2019-01-23 14:54:19.791 info script.js.UserDefined.Tests.Skript1: registered 0 subscriptions and 1 schedule javascript.0 2019-01-23 14:54:19.790 info script.js.UserDefined.Tests.Skript1: schedule(cron=* * * * *) javascript.0 2019-01-23 14:54:19.769 info Start javascript script.js.UserDefined.Tests.Skript1
-
javascript.0 2019-01-23 14:55:00.186 info script.js.UserDefined.Tests.Skript1: ```` `
Das ist offenbar das Log des Debug-Blocks: result liefert nichts.
javascript.0 2019-01-23 14:55:00.185 warn Wrong type of javascript.0.TestVar: "number". Please fix, while deprecated and will not work in next versions. ```` `
Der Datenpunkt "javascript.0.TestVar" sollte vom Typ "Zahl" ("number") sein.
-
Hallo Paul,
das result anscheinend nichts liefert, dass weiß ich ja nur warum ist das so, wenn ich in der Konsole den Befehl eingebe und etwas wiederbekommen.
Den Typ des Datenpunktes habe ich bereits geändert, aber hat nicht die erhoffte Lösung gebracht.
Ich steh da voll auf dem Schlauch warum da nichts kommt ???
-
warum da nichts kommt ??? `
:?: Vielleicht liefern error, stderr die Antwort (Debug-Blöcke) ? -
Ich habe mal auf error gestellt und siehe da:
Host key verification failed
Mhhh, User "dirk" und "root" ist definitiv eingetragen. Kann es sein dass über iobroker er mit einem anderen user kommt obwohl der Befehl ja mit dirk@ ist ???
-
Obwohl ich nochmal die Authentifizierung gemacht habe geht es nicht. Fehlermeldung:
script.js.UserDefined.Tests.Skript1: Permission denied, please try again. Permission denied, please try again. Permission denied (publickey,password).
-
Mhhh, User "dirk" und "root" ist definitiv eingetragen. Kann es sein dass über iobroker er mit einem anderen user kommt obwohl der Befehl ja mit dirk@ ist ??? `
Hier bräuchte ich einmal Hilfe.
Wenn ich per exec Befehl im Blockly den ssh Befehl absetze, komme ich dann mit den angegebenen User auch rüber auf dem entfernten Rechner, so wie ich es über die Konsole auch machen würde, oder macht der javascript-Adapter "etwas anderes daraus", sprich ich komme mit dem user iobroker rüber oder wie auch immer ?
Per Konsole geht es per root und username einwandfrei allerdings per Blockly NICHT !
Ja, es ist ein Rechteproblem wohl, daher die Frage wie der Befehl letztendlich abgesetzt wird ?
-
Hallo,
hat jemand mittlerweile eine reproduzierbare Methode zum Ausführen eines Scripts aus ioBroker per ssh auf einen anderen Rechner hinbekommen? (Blocky oder JavaScript etc. ist egal wenigstens es funktioniert.
also sowas wie
ssh pi@x.x.x.x uptime ??
Ich hatte jetzt schon diverse Lösungen am Start aber nach einem Neuaufbau geht wieder mal gar nichts mehr
-
-
@Segway @Smolo warum macht ihr nicht den umgekehrten Weg und führt ein Skript auf den SSH Host aus und übergibt die Daten mit Hilfe des simple-api Adapters zu ioBroker?
Anonsten in anlehnung an @AlCalzone Vorschlag habe ich hier mal AlCalzone Skript benutzt um eine ssh Verbindung zum iPad aufzubauen. Vielleicht hilft das ja sonst auch weiter. -
wenn das fixer script gelaufen ist, muss man mit sudo arbeiten, damit z.b. ein exec() befehl läuft (indem ein ssh befehl ist) - damit das funktioniert muss im ordner /etc/sudoers.d ein neues file angelegt werden - name ist egal - und dies sieht dann folgendermaßen aus:
damit lassen sich dann die befehle richtig ausführen
will man etwas mit root direkt im exec-blockly ausführen: sudo -u root .......beispiel:
hier noch ein wenig info in einem anderen thread:
https://forum.iobroker.net/topic/9405/offen-root-rechte-für-exec/33
https://forum.iobroker.net/post/269945 -
@liv-in-sky sagte in Blockly - exec Befehl mit ssh:
damit z.b. ein exec() befehl läuft (indem ein ssh befehl ist)
Nur solche Befehle, die root-Rechte benötigen. Und dann bitte auch nur die Befehle die tatsächlich benötigt werden und nicht alles mögliche.
swapfind
ist fürssh
z.B. nicht nötigFür SSH ist es tatsächlich unnötig, da man prima wie oben geschrieben auch mit verminderten Rechten SSH-Befehle absetzen kann.
-
swapfind ist ein bash datei - die alle laufenden processe als tabelle in die vis bringt - ohne root geht da garnichts
ssh - habe ich nicht getestet - da hast du wohl recht - um auf andere server zuzugreifen nutze ich auch bashscripts (kommt noch von früher - nutzen sshpass) - diese können tatsächlich ohne sudo oder root laufen
-
@liv-in-sky Ich meinte das als Hinweis für alle die möglicherweise nur deine Datei abtippen.
-
@AlCalzone
ok - missverstanden - sorry