NEWS
simple-ssh mehrere Befehle senden
-
@femi Hast du mal versucht, die Anleitung des Pakets
simple-ssh
zu lesen?
https://www.npmjs.com/package/simple-ssh
Da gibts nen extra Abschnitt "Chaining commands together" -
ja - ist kompliziiert - bekomme es auch nicht ans laufen
wenn der vorschlag von @AlCalzone (habe ich vorher leider in der npm beschreibung überlesen) nicht funktioniert, kannst du den exec() versuchen
kannst du deine befehle über die konsole ausführen ? mit einem ssh befehl - dann exec() versuchen
falls es dabei ein passsword problem gibt, könntest du sshpass installieren -
-
@alcalzone
Habe das getestet, funktioniert aber leider nicht.var SSH = require('simple-ssh'); var ssh = new SSH({ host: '192.168.xxx.xxx', user: 'root', pass: 'Passwort' }); ssh .exec('cd /Setup/Interfaces/WLAN/Operational', { out: console.log.bind(console) }) .exec('set WLAN-1 {Operating} No', { out: console.log.bind(console) }) .start();
-
@liv-in-sky
auf der Konsole funktionieren die BefehleLeider funktioniert "sceen" nicht auf dem Lancom, sonst könnte ich sehen was überhaupt passiert.
-
hast du den link von @OliverIO mal angesehen? ist das nicht sowas ?
der aufruf
cat <Skript-Datei> | ssh root@<Geräte-IP> beginscript
soll doch letztlich aus der iobroker-console aufgerufen werden - wenn ich das richtig verstehe. wenn es aus der iobroker console funktioniert, kannst du dann im javascript den puren exec(...) befehl ausführen - ohne das ganze simple-ssh zeugs
exec('cat <Skript-Datei> | ssh root@<Geräte-IP> beginscript');
-
@liv-in-sky
Ich könnte natürlich für jeden Sender eine Scriptdatei erstellen mit der ich dann die Befehle ausführe.
Aber es sind über 100 Sender, es wäre viel einfacher wenn ich das direkt im Blockly machen könnte.
Dann würde ich mir den Zwischenschritt sparen. -
leider kenne ich das gerät nicht, und verstehe gerade nicht, was das für scripte und commands sind.
dachte mir bei deinem letzten post: warum erzeugst du die scriptdateien nicht zuerst mit javascript , speicherst die und führst dann den exec aus
- ob das machbar bzw sinnvoll wäre, weiß ich nicht
ich glaube, ich kann dir hier keine große hilfe mehr sein
nochmal zum thema ssh2shell:
habe mit diesem script (und installierte ssh2shell im javascript-instanz setting !) vier befehle ausgeführt
"echo basic test success", "ls -la", "cd /usr/local/bin", "ls"dieses zurückbekommen -
192.168.178.200: echo basic test success basic test success root@raspi4:~#ls -la insgesamt 102580 drwx------ 8 root root 4096 Okt 5 16:05 . drwxr-xr-x 23 root root 4096 Okt 3 14:17 .. -rw------- 1 root root 3434 Okt 12 09:39 .bash_history -rw-r--r-- 1 root root 570 Mai 10 2020 .bashrc drwx------ 2 root root 4096 Aug 20 2020 .cache -rw-r--r-- 1 root root 103362808 Mr 11 2021 chromium-browser_88.0.4324.187-rpt1_armhf.deb -rw-r--r-- 1 root root 1616728 Mr 11 2021 chromium-codecs-ffmpeg-extra_88.0.4324.187-rpt1_armhf.deb drwx------ 6 root root 4096 Okt 5 14:22 .config drwx------ 3 root root 4096 Aug 28 2020 .gnupg drwxr-xr-x 3 root root 4096 Aug 27 2020 .local -rw-r--r-- 1 root root 148 Mai 10 2020 .profile -rw-r--r-- 1 root root 66 Aug 28 08:51 .selected_editor drwx------ 2 root root 4096 Okt 4 17:39 .ssh drwx------ 3 root root 4096 Aug 20 2020 .vnc -rw-r--r-- 1 root root 180 Okt 5 14:25 .wget-hsts -rw------- 1 root root 0 Aug 28 2020 .Xauthority root@raspi4:~#cd /usr/local/bin root@raspi4:/usr/local/bin#ls pi-apps refreshChromeshutty root@raspi4:/usr/local/bin#
-
Ich hänge mich an diesen Thread einmal an, mit folgender Frage
Ich möchte in einem Blockly Script eine Javascript Funktion auslösen. Wie muss der Befehl den lauten, wenn ich den iobroker zuerst sicher stoppen möchte und danach sauber herunterfahren will? Es sollte sichergestellt sein, dass auch alle iobroker instanzen tatsächlich gestoppt sind.
Würde mich über Unterstützung freuen
var SSH = require('simple-ssh'); var ssh = new SSH({ host: 'IP...........', user: 'USER...............', pass: 'PASSWORT.........' }); ssh.exec('iobroker stop').start();
-
Ich habe es jetzt mit
ssh.exec('sudo shutdown -h 2 && iobroker stop').start();
gelöst. Gibt es noch eine Möglichkeit zu prüfen ob wirklich alles beendet wurde?
-
@marc_el_k
evtl andere reihenfolge?
erst iobroker stop und dann shutdown?
dürfte aber irrelevant sein, da shutdown normalerweise
an alle prozesse ein signal sendet, das sie sich beenden sollen.
dann haben die eine gewisse zeit, wenn die überschritten ist, wird dann gewaltsam abgebrochen.
wenn nur shutdow keine probleme macht, dann reicht das.
ansonsten iobroker stop, dann noch ein wait für eine gewisse zeit und dann ein shutdownnachtrag
ah, die parameter waren mir jetztr nicht bewusst. das shutdown -h 2 bewirkt ja das er erst in 2 minuten ausgeführt wird. dann passt das -
@oliverio sagte in simple-ssh mehrere Befehle senden:
evtl andere reihenfolge?
Ich habe das Problem, dass wenn ich zuerst den iobroker stoppe, dass dann keine Befehle mehr ankommen.
Mir stellt sich nur noch die Frage, ob man eine Abfrage machen kann, dass der iobroker auch vollständig beendet wurde?