NEWS
Warnings bei remote SSH Shutdown per Blockly von Windows VM
-
Hallo zusammen,
ich schalte per Blockly eine Windows-VM aus, auf der OpenSSH läuft.
Der Shutdown-Befehl steht in einer JS Funktion, die dann augerufen wird.
var SSH = require('simple-ssh'); var ssh = new SSH({ host: '192.168.4.10', user: 'Mein_User', pass: 'Mein_PW' }); ssh.exec('shutdown -s -f -t 120').start();
An sich klappt alles und die VM wird auch ausgeschaltet, allerdings erhalte ich immer Fehler im Log:
javascript.0 2022-10-11 09:53:10.472 error Error: read ECONNRESET at TCP.onStreamRead (node:internal/stream_base_commons:217:20) javascript.0 2022-10-11 09:53:10.472 error Error: read ECONNRESET javascript.0 2022-10-11 09:53:10.471 error An error happened which is most likely from one of your scripts, but the originating script could not be detected.
Kann jemand helfen ?
-
@kuddel du öffnest die SSH Verbindung, schließt diese aber nie. Die Verbindung ist also die ganzen 2 Minuten offen bis die VM rebootet und dadurch die Verbindung verloren geht.
Du müsstest die Verbindung also sauber trennen oder den Fehler abfangen, siehe https://www.npmjs.com/package/simple-ssh
Wobei ich da kein Beispiel für ein beenden sehen.
Log doch mal auch vor der Ausführung. Wenn meine Theorie stimmt kommt die Fehlermeldung 2 Minuten nachdem du den Befehl gesendet hast.Trennen könnte mit
exit
aus der Sitzung gehen:ssh.exec('shutdown -s -f -t 120 && exit 0').start();
-
@bananajoe der Fehler kommt nicht erst nach 120 Sekunden, sondern direkt nach der Ausführung des Befehls.
Ein "&& exit 0" brachte auch keine Erfolg.
-
@kuddel auch bei anderen Befehlen? z.B. ein echo?
Teste doch sonst mal das Chaining command together und das Capturing error codes. bei dem Zweiten wird dann ja sogar eine Exit-Funktion gesetzt sowie der Returncode / Exit-Code des shutdown-befehls abgefangen.Das NPM Paket musstest du doch extra im JavaScrfipt Adapter hinzufügen, oder?
Alternativ könntest du unter Linux (wenn dein iobroker unter Linux läuft) auch
sshpass
nachinstallieren und den ssh-Befehl als normalen Exec-Befehl absetzen (siehe Anleitung vonsshpass
) -
@bananajoe vielen Dank für die Antworten.
Ich habe den Shutdown jetzt ersteinmal wieder umgebaut und den public ssh key vom ioBroker auf der Windows VM hinterlegt, dann kann man den Shutdown direkt per Blockly ohne JS Funktion machen.
Den Rest werde ich dann mal in Ruhe in meiner Testumgebung versuchen zu fixen
-
Auch wenn das Thema scgon sehr alt ist:
Hast du inzwischen eine Lösung gefunden?
Ich sitze zur Zeit vor der gleichen Fehlermeldung, wodurch dann der js-Adapter komplett neu startet und das Script, das den ssh-Befehl absetzt, natürlich abbricht. -
@umbm ich habe auf meinen ioBroker VM "sshpass" installiert.
Damit kannn ich im Blockly das PW mitgeben.
Im Exec Block steht dann folgendes:
sshpass -p "**********" ssh admin@192.168.4.10 shutdown -s -f -t 120 -c 'ioBroker-Shutdown'
Wichtig war dabei irgendwie auch, dass im Comment kein Leerzeichen stehen darf.
Deswegen "ioBroker-Shutdown" und nicht "ioBroker Shutdown"