NEWS
Einen PI3 durch ioBroker herunterfahren?
-
@Beowolf
Getestetconst node_ssh = require('node-ssh'); const ssh = new node_ssh();
und erhalte den gleichen Fehler:
javascript.1 2020-08-07 16:36:57.322 error (5051) at script.js.common.Test:13:13 javascript.1 2020-08-07 16:36:57.322 error (5051) TypeError: node_ssh is not a constructor javascript.1 2020-08-07 16:36:57.322 error (5051) ^ javascript.1 2020-08-07 16:36:57.322 error (5051) const ssh = new node_ssh(); javascript.1 2020-08-07 16:36:57.321 error (5051) script.js.common.Test: script.js.common.Test:13
-
-
@Beowolf bekomme den gleiche Fehler, aber erst seit dem letzten Javascript Adapter Update.
Im Script wird angezeigt, dass das Modul "node-ssh" nicht gefunden wird. -
Ist das den "rausgeflogen", oder nur ein Fehler?
-
@Beowolf gute Frage, weiß ich nicht. Mir ist es gestern nur aufgefallen, als ich meinen Po der am 3d Drucker hängt über iobroker runter fahren wollte. Ging bisher immer, vllt mal die Javascript Version downgraden, ob es dann funktioniert
-
-
@Thomas-Braun da kommt node-ssh@11.0.0
-
@coyote Genaue Rückmeldung?
-
Genaue Rückmeldung?
/opt/iobroker$ npm list node-ssh iobroker.inst@2.0.3 /opt/iobroker └─┬ iobroker.javascript@4.6.21 └── node-ssh@11.0.0
-
@coyote sagte:
Javascript Version downgraden, ob es dann funktioniert
Funktioniert auch mit Version 4.6.4 nicht. Muss wohl am Modul liegen.
-
Muss wohl am Modul liegen.
Der Zugriff wurde in Version 11.0.0 geändert:
const node_ssh = require('node-ssh').NodeSSH; const ssh = new node_ssh();
Die Doku unter npmjs.com ist noch nicht angepasst.
-
-
@Asgothian sagte in Einen PI3 durch ioBroker herunterfahren?:
Über ein Script geht das herunterfahren recht einfach:
node_ssh = require('node-ssh'); ssh = new node_ssh(); ssh.connect({ host: 'xxx.xxx.x.xxx', username: 'root', password: 'yourRootPasswordHere' }).then(() => { ssh.execCommand("YourShutdownCommandHere"); })
Mit einem anderen Command kann ich so den Plex-Dienst auf dem NAS stoppen/starten.
Was mich jedoch stört ist die Tatsache, dass ich mich für SSH als Administrator anmelden muss
und mein Passwort im Skript ersichtlich ist.Im Internet habe ich eine Seite gefunden, mit welchem man eine Key-Authentication erstellen kann.
Leider weis ich dennoch nicht, wie dies vonstatten gehen soll.
https://debian-administration.org/article/530/SSH_with_authentication_key_instead_of_passwordKann mir jemand helfen?
-
@Kusi Hilft dir dieser Thread vielleicht?
https://forum.iobroker.net/topic/12995/gelöst-blockly-per-ssh-an-anderen-rechner-und-script-ausführen -
@Kusi hilft dir das weiter
https://checkmk.de/lw_ssh_anmeldung_ohne_passwort.html -
@Kusi hast du dir mal den Adapter linux-control angesehen?
-
@Kusi Es gibt duzende Anleitungen - aber ich habe es ein 2.Mal geschafft und fahre gerade einen anderen PI mit iobroker - zwar mit Node-Red runter - aber es ist egal. Das sollte dann grundsätzlich funktionieren
Im Prinzip brauchst Du nur 2-3 Befehle und musst Dich als iobroker anmelden.
Ich gehe mal davon aus, Du hast auf beiden Raspberries einen User PI.
Mach mal Folgendes:
- Gib ein:
sudo -su iobroker cd ~
Dann solltest Du als Prompt das haben:
iobroker@<deineMaschine>:~ $
Wenn Du dann im iobroker HOME Verzeichnis
ls -la .ssh
eingibst solltest Du eigentlich eine Fehlermeldung haben - da dieses Verzeichnis nicht exisistiert.
Dann gibst ein:
ssh-keygen -t rsa -b 4096 -C "iobroker@<DeineMaschine>"
und bestätigst alles mit <Enter> ohne zusätzliches Passwort etc.
Zum Schluß kopierst Du alles auf Deine Zielmaschine indem Du Dich mit dem pi auf Deiner Zielmaschine dann anmeldest - alles bestätigen.
ssh-copy-id pi@<Zielmaschine>
Kommandos auf zum Runterfahren ist genauso dann nur dass Du den Zielpfad noch mitgibst.
Neustart der Zielmaschine sieht dann so aus:
ssh pi@<Zielmaschine> sudo reboot
Auf Deiner Zielmaschine hast Du dann unter dem HOME-Verzeichnis Deines pi Users auch ein Verzeichnis .ssh.
Wenn Du reinschaust hast Du eine Datei namens authorized_keys. Da findest Du die öffentlichen Schlüssel und kannst bei Bedarf auch wieder einzelne löschen!
-
Vielen Dank für all eure Antworten.
@Homoran Wo finde ich denn diesen Adapter und wofür soll dieser genau sein? Edit: Hab ihn angeschaut, sieht interessant aus... Danke für den Tipp!
@mickym Danke für deine präzise Antwort. Ich nutze aber nicht 2 Raspberrys, sondern nur einer und ein Qnap NAS, auf welches ich einen Befehl schicken will.
Gemäss Qnap funktioniert dort SSH nur als Administrator.@arteck Mit der Anleitung, welche du mir geschickt hast, kann ich wenigstens schon mal eine SSH-Verbindung ohne Passworteingabe herstellen, vielen Dank. Den SSH-Befehl senden per ioBroker geht aber leider nicht.
Die Codezeile "Password" habe ich herausgelöscht und sieht nun wie folgt aus:const node_ssh = require('node-ssh').NodeSSH; const ssh = new node_ssh(); ssh.connect({ host: '192.168.1.10', username: 'admin' }).then(() => { ssh.execCommand("/share/CACHEDEV1_DATA/.qpkg/PlexMediaServer/plex.sh start"); })
Folgende Fehler bekomme ich nun:
An error happened which is most likely from one of your scripts, but the originating script could not be detected.
Error: All configured authentication methods failed
Error: All configured authentication methods failed at doNextAuth (/opt/iobroker/node_modules/iobroker.javascript/node_modules/ssh2/lib/client.js:413:17) at tryNextAuth (/opt/iobroker/n
-
@Kusi Aber das macht ja nicht groß was aus. Wenn der iobroker auf dem Raspberry läuft bleiben die Befehle ja alle gleich und nur beim Kopieren auf die Zielmaschine gibst Du halt dann den Befehl für den Administrator auf dem Qnap ein. Also den User bzw. Administrator musst Du halt kennen.
Also:
ssh-copy-id Administrator@<Qnap>
und die Befehle lauten halt dann:
ssh Administrator@<Qnap> Befehl
-
@mickym Braucht es dann also gar nicht mehr einen solch langen Code wie ich oben geschrieben habe?
Muss es somit nur wie folgt aussehen:
ssh admin@192.168.1.10 ssh.execCommand("/share/CACHEDEV1_DATA/.qpkg/PlexMediaServer/plex.sh start")