Skip to content
  • Home
  • Aktuell
  • Tags
  • 0 Ungelesen 0
  • Kategorien
  • Unreplied
  • Beliebt
  • GitHub
  • Docu
  • Hilfe
Skins
  • Light
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Standard: (Kein Skin)
  • Kein Skin
Einklappen
ioBroker Logo

Community Forum

  1. ioBroker Community Home
  2. Deutsch
  3. Skripten / Logik
  4. JavaScript
  5. Simple-SSH Script lässt Javascript Adapter abstürzen

NEWS

  • UPDATE 31.10.: Amazon Alexa - ioBroker Skill läuft aus ?
    apollon77A
    apollon77
    48
    3
    8.4k

  • Monatsrückblick – September 2025
    BluefoxB
    Bluefox
    13
    1
    2.0k

  • Neues Video "KI im Smart Home" - ioBroker plus n8n
    BluefoxB
    Bluefox
    15
    1
    2.5k

Simple-SSH Script lässt Javascript Adapter abstürzen

Geplant Angeheftet Gesperrt Verschoben JavaScript
23 Beiträge 11 Kommentatoren 3.6k Aufrufe 11 Watching
  • Älteste zuerst
  • Neuste zuerst
  • Meiste Stimmen
Antworten
  • In einem neuen Thema antworten
Anmelden zum Antworten
Dieses Thema wurde gelöscht. Nur Nutzer mit entsprechenden Rechten können es sehen.
  • M Offline
    M Offline
    matze19999
    schrieb am zuletzt editiert von
    #1

    Hi

    ich versuche eine SSH Verbindung zu meinem Windows PC aufzubauen und dort einen Befehl auszuführen.
    Dies funktioniert so weit (Der Befehl wird korrekt ausgeführt), doch nach jedem Durchlauf setzt sich der Javascript Adapter mit folgendem Log zurück:

    host.raspberrypi	2019-04-25 18:43:23.028	info	Restart adapter system.adapter.javascript.0 because enabled
    host.raspberrypi	2019-04-25 18:43:23.028	error	instance system.adapter.javascript.0 terminated with code 0 (OK)
    host.raspberrypi	2019-04-25 18:43:23.028	error	Caught by controller[1]: level: 'client-socket' }
    host.raspberrypi	2019-04-25 18:43:23.028	error	Caught by controller[1]: syscall: 'read',
    host.raspberrypi	2019-04-25 18:43:23.027	error	Caught by controller[1]: code: 'ECONNRESET',
    host.raspberrypi	2019-04-25 18:43:23.027	error	Caught by controller[1]: errno: 'ECONNRESET',
    host.raspberrypi	2019-04-25 18:43:23.027	error	Caught by controller[1]: at TCP.onread (net.js:622:25)
    host.raspberrypi	2019-04-25 18:43:23.027	error	Caught by controller[1]: { Error: read ECONNRESET
    host.raspberrypi	2019-04-25 18:43:23.026	error	Caught by controller[0]: level: 'client-socket' }
    host.raspberrypi	2019-04-25 18:43:23.015	error	Caught by controller[0]: syscall: 'read',
    host.raspberrypi	2019-04-25 18:43:23.014	error	Caught by controller[0]: code: 'ECONNRESET',
    host.raspberrypi	2019-04-25 18:43:23.014	error	Caught by controller[0]: errno: 'ECONNRESET',
    host.raspberrypi	2019-04-25 18:43:23.014	error	Caught by controller[0]: at TCP.onread (net.js:622:25)
    host.raspberrypi	2019-04-25 18:43:23.012	error	Caught by controller[0]: { Error: read ECONNRESET
    javascript.0	2019-04-25 18:43:22.906	error	Error: read ECONNRESET at TCP.onread (net.js:622:25)
    javascript.0	2019-04-25 18:43:22.906	error	uncaught exception: read ECONNRESET
    javascript.0	2019-04-25 18:43:22.906	info	script.js.common.node-ssh: Stream :: close :: code: 0, signal: undefined
    

    Dies ist mein SSH Script:

    createState("javascript.0.SSH", 0);
    
    
    on({id: "javascript.0.SSH", change: 'any'}, function (obj) { 
    
    
    var SSH = require('simple-ssh');
    
    var ssh = new SSH({
        host: 'Hostname',
        user: 'Benutzername',
        pass: 'Passwort'
        //port: 9000
    });
    
        log("Script SSH gestartet!", "info");
        ssh.exec('msg * Test').start();
    
    });
    

    Ich sitze seit einigen Stunden daran und kann mit leider nicht erklären warum das passiert.
    Ich bin für jede Hilfe dankbar!

    Viele Grüße

    Matze :grinning:

    blauholstenB 1 Antwort Letzte Antwort
    0
    • M matze19999

      Hi

      ich versuche eine SSH Verbindung zu meinem Windows PC aufzubauen und dort einen Befehl auszuführen.
      Dies funktioniert so weit (Der Befehl wird korrekt ausgeführt), doch nach jedem Durchlauf setzt sich der Javascript Adapter mit folgendem Log zurück:

      host.raspberrypi	2019-04-25 18:43:23.028	info	Restart adapter system.adapter.javascript.0 because enabled
      host.raspberrypi	2019-04-25 18:43:23.028	error	instance system.adapter.javascript.0 terminated with code 0 (OK)
      host.raspberrypi	2019-04-25 18:43:23.028	error	Caught by controller[1]: level: 'client-socket' }
      host.raspberrypi	2019-04-25 18:43:23.028	error	Caught by controller[1]: syscall: 'read',
      host.raspberrypi	2019-04-25 18:43:23.027	error	Caught by controller[1]: code: 'ECONNRESET',
      host.raspberrypi	2019-04-25 18:43:23.027	error	Caught by controller[1]: errno: 'ECONNRESET',
      host.raspberrypi	2019-04-25 18:43:23.027	error	Caught by controller[1]: at TCP.onread (net.js:622:25)
      host.raspberrypi	2019-04-25 18:43:23.027	error	Caught by controller[1]: { Error: read ECONNRESET
      host.raspberrypi	2019-04-25 18:43:23.026	error	Caught by controller[0]: level: 'client-socket' }
      host.raspberrypi	2019-04-25 18:43:23.015	error	Caught by controller[0]: syscall: 'read',
      host.raspberrypi	2019-04-25 18:43:23.014	error	Caught by controller[0]: code: 'ECONNRESET',
      host.raspberrypi	2019-04-25 18:43:23.014	error	Caught by controller[0]: errno: 'ECONNRESET',
      host.raspberrypi	2019-04-25 18:43:23.014	error	Caught by controller[0]: at TCP.onread (net.js:622:25)
      host.raspberrypi	2019-04-25 18:43:23.012	error	Caught by controller[0]: { Error: read ECONNRESET
      javascript.0	2019-04-25 18:43:22.906	error	Error: read ECONNRESET at TCP.onread (net.js:622:25)
      javascript.0	2019-04-25 18:43:22.906	error	uncaught exception: read ECONNRESET
      javascript.0	2019-04-25 18:43:22.906	info	script.js.common.node-ssh: Stream :: close :: code: 0, signal: undefined
      

      Dies ist mein SSH Script:

      createState("javascript.0.SSH", 0);
      
      
      on({id: "javascript.0.SSH", change: 'any'}, function (obj) { 
      
      
      var SSH = require('simple-ssh');
      
      var ssh = new SSH({
          host: 'Hostname',
          user: 'Benutzername',
          pass: 'Passwort'
          //port: 9000
      });
      
          log("Script SSH gestartet!", "info");
          ssh.exec('msg * Test').start();
      
      });
      

      Ich sitze seit einigen Stunden daran und kann mit leider nicht erklären warum das passiert.
      Ich bin für jede Hilfe dankbar!

      Viele Grüße

      Matze :grinning:

      blauholstenB Offline
      blauholstenB Offline
      blauholsten
      Developer
      schrieb am zuletzt editiert von
      #2

      @matze19999

      Hi,

      Erstmal musst du eine Error Behandlung machen, damit schmiert dir die js Instanz nicht ab.

      Das sollte so in etwa gegen....

      ssh.on('error', function(err) {
          log('Oops, something went wrong.');
          log(err);
          ssh.end();
      });
      

      Dann musst du Mal googlen was der Fehler bedeutet.

      Entwickler vom: - Viessman Adapter
      - Alarm Adapter

      1 Antwort Letzte Antwort
      0
      • OliverIOO Offline
        OliverIOO Offline
        OliverIO
        schrieb am zuletzt editiert von
        #3

        ECONNRESET bedeutet, dass die Gegenseite die Verbindung unterbrochen hat weil dort ein fehler aufgetreten ist.
        dh
        prüfe die Zugangsdaten
        prüfe die Berechtigung dort
        prüfe den befehl, funktioniert er wenn du es direkt in einer ssh console eingibst mit den gleichen berechtigungen
        schalte dort evtl ein logging ein um zu prüfen was schief gelaufen ist

        Meine Adapter und Widgets
        TVProgram, SqueezeboxRPC, OpenLiga, RSSFeed, MyTime,, pi-hole2, vis-json-template, skiinfo, vis-mapwidgets, vis-2-widgets-rssfeed
        Links im Profil

        1 Antwort Letzte Antwort
        0
        • joergeliJ Offline
          joergeliJ Offline
          joergeli
          schrieb am zuletzt editiert von
          #4

          Hallo zusammen,

          Ähnliches Problem wie matze19999:
          Ich möchte einen Raspi, auf dem Octoprint für 3D-Drucker läuft, via simple-ssh "sauber", also mit "shutdown -h now" herunterfahren.
          Das funktioniert zwar im Prinzip und geht 2, oder 3 Mal gut, aber beim nächsten Mal herunterfahren, stürzt die kpl. Javascript-Instanz (Javascript-Adapter V 4.1.16) ab.
          Andere Linux-Befehle, wie z.B. "pwd", funktionieren dagegen einwandfrei via simple-ssh.

          Hier ein Screenshot des Logs:
          ssh-error.jpg

          Meine Interpretation des Logs:

          uncaught exception: Not connected
          

          , was m.E. ja logisch ist, weil der Shutdown-Befehl abgesetzt wurde und somit die SSH-Verbindung seitens Raspi getrennt wurde.

          Hier das entspr. Script (in Auszügen) dazu:

          //______ Variablen, um via SSH auf OctoPi einzuloggen ____
          var SSH = require('simple-ssh');
          var ssh = new SSH({
              host: '192.168.192.30',
              port: 22,
              user: 'xxx',
              pass: 'yyy'
          });
          .
          .
          .
                          //Octoprint-Server via SSH herunterfahren
                          setTimeout(function(){
                          log ('___ SSH Verbindung gestartet ___');
                          //SSH-Session starten
                          ssh.exec( 'echo "yyy"|sudo -S shutdown -h now').start();       
                                  ssh.on('error', function(err) {
                                      log('___ Oops, es ist etwas schiefgelaufen: ___');
                                      log(err);
                                      ssh.end();
                                  });             
          
                          }, 6000);
          .
          .
          .
          

          Hier wird der Shutdown-Befehl sofort abgesetzt und es gibt keine Möglichkeit, danach noch ein "exit", oder "logout" anzuhängen.
          (Bitte nicht an der Zeitverzögerung setTimeout(function() stören, das ist wegen anderer Sachen drin.)

          Als Workaround habe ich dann einen um 1 Minute verzögerten Shutdown gewählt:

          //______ Variablen, um via SSH auf OctoPi einzuloggen ____
          var SSH = require('simple-ssh');
          var ssh = new SSH({
              host: '192.168.192.30',
              port: 22,
              user: 'xxx',
              pass: 'yyy'
          });
          .
          .
          .
          //Octoprint-Server verzögert via SSH herunterfahren
             setTimeout(function(){
             //log ('___ SSH - Shutdown-Befehl wurde abgesetzt ___');
             //SSH-Session starten
             ssh.exec( 'echo "__ SSH: Shutdown in 60 Sekunden __"  && echo "yyy"|sudo -S shutdown -h +1 "System wird in 60 Sekunden heruntergefahren ..." && logout', {
                  out: function(stdout) {
                      log(stdout);
                      }},
                      ) 
                      .start();
                              
                      ssh.on('error', function(err) {
                          log('__ Oops, es ist etwas schiefgelaufen: __');
                          log(err);
                          ssh.end();
                       });
          
              }, 6000);
          
          

          Das funktioniert problemlos, ist halt nur "unschön", daß man 1 Min. warten muss.
          Kürzere Verzögerungen als 1Min., wie z.B. 10 Sekunden, sind mit neueren Raspbian-Versionen (Stretch, Buster) leider nicht mehr möglich.
          Soweit ich gelesen habe, wird simple-ssh vom Entwickler auch nicht mehr gepflegt, somit sind von dort keine Änderungen zu erwarten.

          Frage:
          Kann jemand von Euch einen Linux-Rechner via simple-ssh problemlos sofort herunterfahren,
          oder hat jemand eine Idee, wie man das Abstürzen der Javascript-Instanz verhindern kann?

          Gruß
          Jörg

          AsgothianA 1 Antwort Letzte Antwort
          0
          • joergeliJ joergeli

            Hallo zusammen,

            Ähnliches Problem wie matze19999:
            Ich möchte einen Raspi, auf dem Octoprint für 3D-Drucker läuft, via simple-ssh "sauber", also mit "shutdown -h now" herunterfahren.
            Das funktioniert zwar im Prinzip und geht 2, oder 3 Mal gut, aber beim nächsten Mal herunterfahren, stürzt die kpl. Javascript-Instanz (Javascript-Adapter V 4.1.16) ab.
            Andere Linux-Befehle, wie z.B. "pwd", funktionieren dagegen einwandfrei via simple-ssh.

            Hier ein Screenshot des Logs:
            ssh-error.jpg

            Meine Interpretation des Logs:

            uncaught exception: Not connected
            

            , was m.E. ja logisch ist, weil der Shutdown-Befehl abgesetzt wurde und somit die SSH-Verbindung seitens Raspi getrennt wurde.

            Hier das entspr. Script (in Auszügen) dazu:

            //______ Variablen, um via SSH auf OctoPi einzuloggen ____
            var SSH = require('simple-ssh');
            var ssh = new SSH({
                host: '192.168.192.30',
                port: 22,
                user: 'xxx',
                pass: 'yyy'
            });
            .
            .
            .
                            //Octoprint-Server via SSH herunterfahren
                            setTimeout(function(){
                            log ('___ SSH Verbindung gestartet ___');
                            //SSH-Session starten
                            ssh.exec( 'echo "yyy"|sudo -S shutdown -h now').start();       
                                    ssh.on('error', function(err) {
                                        log('___ Oops, es ist etwas schiefgelaufen: ___');
                                        log(err);
                                        ssh.end();
                                    });             
            
                            }, 6000);
            .
            .
            .
            

            Hier wird der Shutdown-Befehl sofort abgesetzt und es gibt keine Möglichkeit, danach noch ein "exit", oder "logout" anzuhängen.
            (Bitte nicht an der Zeitverzögerung setTimeout(function() stören, das ist wegen anderer Sachen drin.)

            Als Workaround habe ich dann einen um 1 Minute verzögerten Shutdown gewählt:

            //______ Variablen, um via SSH auf OctoPi einzuloggen ____
            var SSH = require('simple-ssh');
            var ssh = new SSH({
                host: '192.168.192.30',
                port: 22,
                user: 'xxx',
                pass: 'yyy'
            });
            .
            .
            .
            //Octoprint-Server verzögert via SSH herunterfahren
               setTimeout(function(){
               //log ('___ SSH - Shutdown-Befehl wurde abgesetzt ___');
               //SSH-Session starten
               ssh.exec( 'echo "__ SSH: Shutdown in 60 Sekunden __"  && echo "yyy"|sudo -S shutdown -h +1 "System wird in 60 Sekunden heruntergefahren ..." && logout', {
                    out: function(stdout) {
                        log(stdout);
                        }},
                        ) 
                        .start();
                                
                        ssh.on('error', function(err) {
                            log('__ Oops, es ist etwas schiefgelaufen: __');
                            log(err);
                            ssh.end();
                         });
            
                }, 6000);
            
            

            Das funktioniert problemlos, ist halt nur "unschön", daß man 1 Min. warten muss.
            Kürzere Verzögerungen als 1Min., wie z.B. 10 Sekunden, sind mit neueren Raspbian-Versionen (Stretch, Buster) leider nicht mehr möglich.
            Soweit ich gelesen habe, wird simple-ssh vom Entwickler auch nicht mehr gepflegt, somit sind von dort keine Änderungen zu erwarten.

            Frage:
            Kann jemand von Euch einen Linux-Rechner via simple-ssh problemlos sofort herunterfahren,
            oder hat jemand eine Idee, wie man das Abstürzen der Javascript-Instanz verhindern kann?

            Gruß
            Jörg

            AsgothianA Offline
            AsgothianA Offline
            Asgothian
            Developer
            schrieb am zuletzt editiert von Asgothian
            #5

            @joergeli
            Ich würde versuchen den exec Befehl in ein try { } catch {} zu Kapseln, ggf. Fängt das die exception ab so das der js Adapter nicht abstürzt.

            Als Alternative müsste es möglich sein ein Script auf dem rpi zu schreiben das erst n Sekunden wartet und dann das System sofort herunter fährt. Ggf. Musst du dann noch verhindern das das Script durch beenden der ssh Verbindung auch beendet wird. Wie das bei raspi auf geht weiß ich nicht.

            A.

            ioBroker auf RPi4 - Hardware soweit wie möglich via Zigbee.
            "Shit don't work" ist keine Fehlermeldung, sondern ein Fluch.

            1 Antwort Letzte Antwort
            0
            • E Offline
              E Offline
              el_malto
              schrieb am zuletzt editiert von
              #6

              ich benutze https://forum.iobroker.net/topic/11679/raspberry-pi-runterfahren/14

              Läuft ohne Probleme bei mir.

              1 Antwort Letzte Antwort
              0
              • joergeliJ Offline
                joergeliJ Offline
                joergeli
                schrieb am zuletzt editiert von
                #7

                @Asgothian
                Ich habe es mit try/catch versucht, leider ebenfalls Absturz der JS-Instanz nach 2-3maligem Herunterfahren.
                Shell-Script wird m.E. auch nicht funktionieren, denn wenn ich z.B. "sleep 3 && shutdown -h now && logout" übergebe, wird der Shutdown-Befehl zwar erst nach 3 Sekunden ausgeführt, aber anschl. wird genau so "unsauber" aus simple-ssh ausgestiegen, als wenn ich den Shutdown_Befehl sofort absetze, weil das "logout" nicht mehr angenommen wird.
                Mit anderen Worten: Wenn Shutdown abgesetzt wurde, kann danach nichts mehr übergeben werden.

                @el_malto
                Das im Link verwendete node-ssh funktioniert :+1:
                Also nicht simple-ssh verwenden, sondern node-ssh.
                Ich habe es jetzt so gelöst:

                var node_ssh = require('node-ssh');
                var ssh = new node_ssh();
                .
                .
                                //Octoprint-Server via SSH herunterfahren
                                setTimeout(function(){
                                log ('__ SSH Verbindung gestartet __');
                                //SSH-Session starten
                                    ssh.connect({
                                        host: '192.168.192.30',
                                        username: 'xxx',
                                        password: 'yyy'
                                    }).then(() => {
                                        ssh.execCommand('echo "yyy"|sudo -S shutdown -h now');
                                    });                           
                
                                }, 6000);
                

                Man beachte, daß ich das Passwort (yyy) nochmals an den sudo-Befehl übergeben musste (mit | = pipen), da mein Raspi - warum auch immer - vor der erstmaligen Ausführung eines sudo-Befehls nochmals nach dem Passwort
                fragt.

                Vielen Dank für Eure Hilfe!
                Jörg

                AsgothianA K 2 Antworten Letzte Antwort
                1
                • joergeliJ joergeli

                  @Asgothian
                  Ich habe es mit try/catch versucht, leider ebenfalls Absturz der JS-Instanz nach 2-3maligem Herunterfahren.
                  Shell-Script wird m.E. auch nicht funktionieren, denn wenn ich z.B. "sleep 3 && shutdown -h now && logout" übergebe, wird der Shutdown-Befehl zwar erst nach 3 Sekunden ausgeführt, aber anschl. wird genau so "unsauber" aus simple-ssh ausgestiegen, als wenn ich den Shutdown_Befehl sofort absetze, weil das "logout" nicht mehr angenommen wird.
                  Mit anderen Worten: Wenn Shutdown abgesetzt wurde, kann danach nichts mehr übergeben werden.

                  @el_malto
                  Das im Link verwendete node-ssh funktioniert :+1:
                  Also nicht simple-ssh verwenden, sondern node-ssh.
                  Ich habe es jetzt so gelöst:

                  var node_ssh = require('node-ssh');
                  var ssh = new node_ssh();
                  .
                  .
                                  //Octoprint-Server via SSH herunterfahren
                                  setTimeout(function(){
                                  log ('__ SSH Verbindung gestartet __');
                                  //SSH-Session starten
                                      ssh.connect({
                                          host: '192.168.192.30',
                                          username: 'xxx',
                                          password: 'yyy'
                                      }).then(() => {
                                          ssh.execCommand('echo "yyy"|sudo -S shutdown -h now');
                                      });                           
                  
                                  }, 6000);
                  

                  Man beachte, daß ich das Passwort (yyy) nochmals an den sudo-Befehl übergeben musste (mit | = pipen), da mein Raspi - warum auch immer - vor der erstmaligen Ausführung eines sudo-Befehls nochmals nach dem Passwort
                  fragt.

                  Vielen Dank für Eure Hilfe!
                  Jörg

                  AsgothianA Offline
                  AsgothianA Offline
                  Asgothian
                  Developer
                  schrieb am zuletzt editiert von
                  #8

                  @joergeli sagte in Simple-SSH Script lässt Javascript Adapter abstürzen:

                  Ich habe es mit try/catch versucht, leider ebenfalls Absturz der JS-Instanz nach 2-3maligem Herunterfahren.
                  Shell-Script wird m.E. auch nicht funktionieren, denn wenn ich z.B. "sleep 3 && shutdown -h now && logout" übergebe, wird der Shutdown-Befehl zwar erst nach 3 Sekunden ausgeführt, aber anschl. wird genau so "unsauber" aus simple-ssh ausgestiegen, als wenn ich den Shutdown_Befehl sofort absetze, weil das "logout" nicht mehr angenommen wird.
                  Mit anderen Worten: Wenn Shutdown abgesetzt wurde, kann danach nichts mehr übergeben werden.

                  Der Trick hier sollte sein die Befehle nicht einfach hintereinander zu setzen (mit einem &&) sondern per nohup oder ähnlichem tool ein lokal auf dem RPI liegendes bash script zu starten das "sleep" und "shutdown" beinhaltet. Der Befehl nohup wartet nicht bis das von ihm aufgerufene Script beendet wurde und wird auch nicht beendet wenn der Benutzer sich abmeldet.

                  Ich bin allerdings froh das du eine Variante gefunden hast die ohne diesen Trick funktioniert.

                  Man beachte, daß ich das Passwort (yyy) nochmals an den sudo-Befehl übergeben musste (mit | = pipen), da mein Raspi - warum auch immer - vor der erstmaligen Ausführung eines sudo-Befehls nochmals nach dem Passwort
                  fragt.

                  Die Antwort darauf ist einfach. Der Benutzer xxx mit dem du dich anmeldest hat zwar das Recht per sudo administrator befehle auszuführen, läuft aber im Standard nicht mit Admin rechten - das ist das normale Linux Sicherheitskonzept - und war auch bei der simple-ssh version oben notwendig. Deswegen muss bei der ersten Verwendung von sudo das Kennwort mit eingegeben werden. Es wird (per session, soweit ich erinnere) gespeichert und bei folgenden sudo befehlen nicht weiter benötigt.

                  ioBroker auf RPi4 - Hardware soweit wie möglich via Zigbee.
                  "Shit don't work" ist keine Fehlermeldung, sondern ein Fluch.

                  joergeliJ 1 Antwort Letzte Antwort
                  0
                  • AsgothianA Asgothian

                    @joergeli sagte in Simple-SSH Script lässt Javascript Adapter abstürzen:

                    Ich habe es mit try/catch versucht, leider ebenfalls Absturz der JS-Instanz nach 2-3maligem Herunterfahren.
                    Shell-Script wird m.E. auch nicht funktionieren, denn wenn ich z.B. "sleep 3 && shutdown -h now && logout" übergebe, wird der Shutdown-Befehl zwar erst nach 3 Sekunden ausgeführt, aber anschl. wird genau so "unsauber" aus simple-ssh ausgestiegen, als wenn ich den Shutdown_Befehl sofort absetze, weil das "logout" nicht mehr angenommen wird.
                    Mit anderen Worten: Wenn Shutdown abgesetzt wurde, kann danach nichts mehr übergeben werden.

                    Der Trick hier sollte sein die Befehle nicht einfach hintereinander zu setzen (mit einem &&) sondern per nohup oder ähnlichem tool ein lokal auf dem RPI liegendes bash script zu starten das "sleep" und "shutdown" beinhaltet. Der Befehl nohup wartet nicht bis das von ihm aufgerufene Script beendet wurde und wird auch nicht beendet wenn der Benutzer sich abmeldet.

                    Ich bin allerdings froh das du eine Variante gefunden hast die ohne diesen Trick funktioniert.

                    Man beachte, daß ich das Passwort (yyy) nochmals an den sudo-Befehl übergeben musste (mit | = pipen), da mein Raspi - warum auch immer - vor der erstmaligen Ausführung eines sudo-Befehls nochmals nach dem Passwort
                    fragt.

                    Die Antwort darauf ist einfach. Der Benutzer xxx mit dem du dich anmeldest hat zwar das Recht per sudo administrator befehle auszuführen, läuft aber im Standard nicht mit Admin rechten - das ist das normale Linux Sicherheitskonzept - und war auch bei der simple-ssh version oben notwendig. Deswegen muss bei der ersten Verwendung von sudo das Kennwort mit eingegeben werden. Es wird (per session, soweit ich erinnere) gespeichert und bei folgenden sudo befehlen nicht weiter benötigt.

                    joergeliJ Offline
                    joergeliJ Offline
                    joergeli
                    schrieb am zuletzt editiert von
                    #9

                    @Asgothian
                    Hi,
                    danke für Deine Erläuterungen, bin halt nicht so der Linux-Crack.

                    nohup kannte ich noch nicht.
                    Damit sollte es möglich sein, ein bash-script zu starten, welches zuerst ein "logout" , dann "sleep" und anschl. ein "shutdown -h now" ausführt.
                    Wie gesagt, simple-ssh braucht wohl ein sauberes "logout", bzw. "exit", um nicht die kpl. js-Instanz zum Absturz zu bringen.

                    sudo-Kennwort:
                    Das leuchtet soweit ein.
                    Mich hat nur verwirrt, daß wenn ich mich via Putty als User "pi" auf dem ioBroker-Raspi einlogge, einen sudo-Befehl eingeben kann, und nicht nochmals nach dem Kennwort gefragt werde.

                    Gruß
                    Jörg

                    AsgothianA 1 Antwort Letzte Antwort
                    0
                    • joergeliJ joergeli

                      @Asgothian
                      Hi,
                      danke für Deine Erläuterungen, bin halt nicht so der Linux-Crack.

                      nohup kannte ich noch nicht.
                      Damit sollte es möglich sein, ein bash-script zu starten, welches zuerst ein "logout" , dann "sleep" und anschl. ein "shutdown -h now" ausführt.
                      Wie gesagt, simple-ssh braucht wohl ein sauberes "logout", bzw. "exit", um nicht die kpl. js-Instanz zum Absturz zu bringen.

                      sudo-Kennwort:
                      Das leuchtet soweit ein.
                      Mich hat nur verwirrt, daß wenn ich mich via Putty als User "pi" auf dem ioBroker-Raspi einlogge, einen sudo-Befehl eingeben kann, und nicht nochmals nach dem Kennwort gefragt werde.

                      Gruß
                      Jörg

                      AsgothianA Offline
                      AsgothianA Offline
                      Asgothian
                      Developer
                      schrieb am zuletzt editiert von
                      #10

                      @joergeli sagte in Simple-SSH Script lässt Javascript Adapter abstürzen:

                      @Asgothian
                      Hi,
                      danke für Deine Erläuterungen, bin halt nicht so der Linux-Crack.

                      nohup kannte ich noch nicht.
                      Damit sollte es möglich sein, ein bash-script zu starten, welches zuerst ein "logout" , dann "sleep" und anschl. ein "shutdown -h now" ausführt.
                      Wie gesagt, simple-ssh braucht wohl ein sauberes "logout", bzw. "exit", um nicht die kpl. js-Instanz zum Absturz zu bringen.

                      Nicht ganz. Der Ablauf wäre:

                      Ein Script (shutdown_system.sh), das sleep und dann shutdown -h now macht
                      Der Aufruf aus dem simple-SSH wäre nohup shutdown_system.sh && logout

                      ioBroker auf RPi4 - Hardware soweit wie möglich via Zigbee.
                      "Shit don't work" ist keine Fehlermeldung, sondern ein Fluch.

                      1 Antwort Letzte Antwort
                      0
                      • TeNNo2k5T Offline
                        TeNNo2k5T Offline
                        TeNNo2k5
                        schrieb am zuletzt editiert von
                        #11

                        Vielleicht als Alternative einfach normales SSH mit Public-Key-Authentifizierung verwenden, das entspricht dem normalen Linux Sicherheitskonzept da Passwörter nicht in Skripten hinterlegt sind und bringt den Javascript Adapter nicht durcheinander.

                        Anleitung zum Einrichten:

                        https://www.thomas-krenn.com/de/wiki/OpenSSH_Public_Key_Authentifizierung_unter_Ubuntu

                        Wenn die Verbindung eingerichtet ist einfach die Keys zum iobroker User übertragen:

                        cp -rT /home/pi/.ssh/ /home/iobroker/.ssh 
                        chown iobroker /home/iobroker/.ssh/authorized_keys 
                        chown iobroker /home/iobroker/.ssh/id_rsa 
                        chown iobroker /home/iobroker/.ssh/known_hosts
                        

                        Proxmox VE 7.4 [Shuttle DH310V2] = LXC [Ubuntu 22.04]
                        ioBroker – Pi-hole – InfluxDB – Grafana – WireGuard – Ansible - Mosquitto - Zigbee2MQTT

                        joergeliJ 1 Antwort Letzte Antwort
                        0
                        • TeNNo2k5T TeNNo2k5

                          Vielleicht als Alternative einfach normales SSH mit Public-Key-Authentifizierung verwenden, das entspricht dem normalen Linux Sicherheitskonzept da Passwörter nicht in Skripten hinterlegt sind und bringt den Javascript Adapter nicht durcheinander.

                          Anleitung zum Einrichten:

                          https://www.thomas-krenn.com/de/wiki/OpenSSH_Public_Key_Authentifizierung_unter_Ubuntu

                          Wenn die Verbindung eingerichtet ist einfach die Keys zum iobroker User übertragen:

                          cp -rT /home/pi/.ssh/ /home/iobroker/.ssh 
                          chown iobroker /home/iobroker/.ssh/authorized_keys 
                          chown iobroker /home/iobroker/.ssh/id_rsa 
                          chown iobroker /home/iobroker/.ssh/known_hosts
                          
                          joergeliJ Offline
                          joergeliJ Offline
                          joergeli
                          schrieb am zuletzt editiert von
                          #12

                          @TeNNo2k5
                          ... viele Wege führen nach Rom
                          Allerdings scheint mir diese Variante für "Nicht-Linux-Spezies" doch recht kompliziert.

                          Ich hatte anfangs auch nicht mit solchen Problemen bei einem Shutdown via SSH gerechnet.
                          Habe aber - Dank Eurer Hilfe - eine Lösung gefunden und vor allem einiges dazugelernt.

                          Danke nochmals
                          Jörg

                          1 Antwort Letzte Antwort
                          0
                          • joergeliJ joergeli

                            @Asgothian
                            Ich habe es mit try/catch versucht, leider ebenfalls Absturz der JS-Instanz nach 2-3maligem Herunterfahren.
                            Shell-Script wird m.E. auch nicht funktionieren, denn wenn ich z.B. "sleep 3 && shutdown -h now && logout" übergebe, wird der Shutdown-Befehl zwar erst nach 3 Sekunden ausgeführt, aber anschl. wird genau so "unsauber" aus simple-ssh ausgestiegen, als wenn ich den Shutdown_Befehl sofort absetze, weil das "logout" nicht mehr angenommen wird.
                            Mit anderen Worten: Wenn Shutdown abgesetzt wurde, kann danach nichts mehr übergeben werden.

                            @el_malto
                            Das im Link verwendete node-ssh funktioniert :+1:
                            Also nicht simple-ssh verwenden, sondern node-ssh.
                            Ich habe es jetzt so gelöst:

                            var node_ssh = require('node-ssh');
                            var ssh = new node_ssh();
                            .
                            .
                                            //Octoprint-Server via SSH herunterfahren
                                            setTimeout(function(){
                                            log ('__ SSH Verbindung gestartet __');
                                            //SSH-Session starten
                                                ssh.connect({
                                                    host: '192.168.192.30',
                                                    username: 'xxx',
                                                    password: 'yyy'
                                                }).then(() => {
                                                    ssh.execCommand('echo "yyy"|sudo -S shutdown -h now');
                                                });                           
                            
                                            }, 6000);
                            

                            Man beachte, daß ich das Passwort (yyy) nochmals an den sudo-Befehl übergeben musste (mit | = pipen), da mein Raspi - warum auch immer - vor der erstmaligen Ausführung eines sudo-Befehls nochmals nach dem Passwort
                            fragt.

                            Vielen Dank für Eure Hilfe!
                            Jörg

                            K Offline
                            K Offline
                            KHK
                            schrieb am zuletzt editiert von
                            #13

                            @joergeli said in Simple-SSH Script lässt Javascript Adapter abstürzen:

                            Also nicht simple-ssh verwenden, sondern node-ssh.

                            Dieses node-ssh muss das irgendwie neu installiert werden oder was muss gemacht werden?

                            Ich habe das mal probiert, aber es kommt die Meldung "TypeError: node_ssh is not a constructor"

                            Karl

                            joergeliJ E 2 Antworten Letzte Antwort
                            0
                            • K KHK

                              @joergeli said in Simple-SSH Script lässt Javascript Adapter abstürzen:

                              Also nicht simple-ssh verwenden, sondern node-ssh.

                              Dieses node-ssh muss das irgendwie neu installiert werden oder was muss gemacht werden?

                              Ich habe das mal probiert, aber es kommt die Meldung "TypeError: node_ssh is not a constructor"

                              Karl

                              joergeliJ Offline
                              joergeliJ Offline
                              joergeli
                              schrieb am zuletzt editiert von
                              #14

                              @khk
                              Es sollte reichen, node-ssh als zusätzliches Modul in der Konfiguration des JS-Adapters mit einzutragen.
                              IMHO wird es dann automatisch installiert.
                              js-adapter-konfiguration.jpg
                              Gruß
                              Jörg

                              1 Antwort Letzte Antwort
                              0
                              • K KHK

                                @joergeli said in Simple-SSH Script lässt Javascript Adapter abstürzen:

                                Also nicht simple-ssh verwenden, sondern node-ssh.

                                Dieses node-ssh muss das irgendwie neu installiert werden oder was muss gemacht werden?

                                Ich habe das mal probiert, aber es kommt die Meldung "TypeError: node_ssh is not a constructor"

                                Karl

                                E Offline
                                E Offline
                                el_malto
                                schrieb am zuletzt editiert von el_malto
                                #15

                                @khk du kannst das Skript von oben nicht mehr verwenden. Es haben sich die Aufrufe geändert. Musst dir mal das Example angucken -> https://www.npmjs.com/package/node-ssh
                                Ich hab meine Skripte so angepasst:

                                const {NodeSSH} = require('node-ssh')
                                const ssh = new NodeSSH()
                                
                                ssh.connect({
                                  host: '192.168.xxx.xxx',
                                  username: '<user>',
                                  password: '<pass>'
                                }).then(() => {
                                  ssh.execCommand("<command>");
                                })
                                
                                joergeliJ 1 Antwort Letzte Antwort
                                0
                                • E el_malto

                                  @khk du kannst das Skript von oben nicht mehr verwenden. Es haben sich die Aufrufe geändert. Musst dir mal das Example angucken -> https://www.npmjs.com/package/node-ssh
                                  Ich hab meine Skripte so angepasst:

                                  const {NodeSSH} = require('node-ssh')
                                  const ssh = new NodeSSH()
                                  
                                  ssh.connect({
                                    host: '192.168.xxx.xxx',
                                    username: '<user>',
                                    password: '<pass>'
                                  }).then(() => {
                                    ssh.execCommand("<command>");
                                  })
                                  
                                  joergeliJ Offline
                                  joergeliJ Offline
                                  joergeli
                                  schrieb am zuletzt editiert von
                                  #16

                                  @el_malto
                                  Was ist da jetzt anders als im obigen Script?
                                  (Außer daß Du NodeSSH in geschweiften Klammern? als Konstante deklariert hast)

                                  Oder übergibst Du das password nicht nochmals im ssh.execCommand?

                                  Gruß
                                  Jörg

                                  E 1 Antwort Letzte Antwort
                                  0
                                  • joergeliJ joergeli

                                    @el_malto
                                    Was ist da jetzt anders als im obigen Script?
                                    (Außer daß Du NodeSSH in geschweiften Klammern? als Konstante deklariert hast)

                                    Oder übergibst Du das password nicht nochmals im ssh.execCommand?

                                    Gruß
                                    Jörg

                                    E Offline
                                    E Offline
                                    el_malto
                                    schrieb am zuletzt editiert von el_malto
                                    #17

                                    @joergeli es ist jetzt nicht mehr node_ssh sondern NodeSSH. Deswegen auch der Fehler.

                                    "TypeError: node_ssh is not a constructor"
                                    

                                    Ist im Changelog auch drin:
                                    https://github.com/steelbrain/node-ssh/blob/master/CHANGELOG.md#1100

                                    joergeliJ 1 Antwort Letzte Antwort
                                    0
                                    • E el_malto

                                      @joergeli es ist jetzt nicht mehr node_ssh sondern NodeSSH. Deswegen auch der Fehler.

                                      "TypeError: node_ssh is not a constructor"
                                      

                                      Ist im Changelog auch drin:
                                      https://github.com/steelbrain/node-ssh/blob/master/CHANGELOG.md#1100

                                      joergeliJ Offline
                                      joergeliJ Offline
                                      joergeli
                                      schrieb am zuletzt editiert von
                                      #18

                                      @el_malto
                                      ahhh, OK.
                                      Ich habe es bei mir jetzt auch wie bei Dir angepasst.

                                      const {NodeSSH} = require('node-ssh')
                                      const ssh = new NodeSSH()
                                      

                                      Nebenbei:
                                      Bei mir kam keine Fehlermeldung wie bei @KHK, weil ich irgendwann schon mal folgende Anpassung vorgenommen hatte:

                                      var node_ssh = require('node-ssh').NodeSSH;
                                      var ssh = new node_ssh();
                                      

                                      (Hatte ich wohl irgendwo im Forum gefunden)

                                      Gruß und Danke
                                      Jörg

                                      1 Antwort Letzte Antwort
                                      1
                                      • H Nicht stören
                                        H Nicht stören
                                        Hansi1234
                                        schrieb am zuletzt editiert von
                                        #19

                                        Hat jemand aktuell noch ein ssh script am laufen? Ich bekomme das Modul nicht installiert:

                                        javascript.0	2021-04-26 07:54:48.372	error	(22266) Cannot install nodessh: 1
                                        javascript.0	2021-04-26 07:54:48.358	error	(22266) npm ERR! A complete log of this run can be found in: npm ERR! /home/iobroker/.npm/_logs/2021-04-26T05_54_48_349Z-debug.log
                                        javascript.0	2021-04-26 07:54:48.357	error	(22266)
                                        javascript.0	2021-04-26 07:54:48.348	error	(22266) ERR! 404 Not Found - GET https://registry.npmjs.org/nodessh - Not found npm ERR! 404 npm ERR! 404 'nodessh@latest' is not in the npm registry. npm ERR! 404 You should bug the author to publi
                                        javascript.0	2021-04-26 07:54:48.346	error	(22266) npm
                                        javascript.0	2021-04-26 07:54:48.338	error	(22266) ERR! code E404
                                        javascript.0	2021-04-26 07:54:48.336	error	(22266) npm
                                        javascript.0	2021-04-26 07:54:46.257	info	(22266) npm install nodessh --production (System call)
                                        
                                        AsgothianA 1 Antwort Letzte Antwort
                                        0
                                        • H Hansi1234

                                          Hat jemand aktuell noch ein ssh script am laufen? Ich bekomme das Modul nicht installiert:

                                          javascript.0	2021-04-26 07:54:48.372	error	(22266) Cannot install nodessh: 1
                                          javascript.0	2021-04-26 07:54:48.358	error	(22266) npm ERR! A complete log of this run can be found in: npm ERR! /home/iobroker/.npm/_logs/2021-04-26T05_54_48_349Z-debug.log
                                          javascript.0	2021-04-26 07:54:48.357	error	(22266)
                                          javascript.0	2021-04-26 07:54:48.348	error	(22266) ERR! 404 Not Found - GET https://registry.npmjs.org/nodessh - Not found npm ERR! 404 npm ERR! 404 'nodessh@latest' is not in the npm registry. npm ERR! 404 You should bug the author to publi
                                          javascript.0	2021-04-26 07:54:48.346	error	(22266) npm
                                          javascript.0	2021-04-26 07:54:48.338	error	(22266) ERR! code E404
                                          javascript.0	2021-04-26 07:54:48.336	error	(22266) npm
                                          javascript.0	2021-04-26 07:54:46.257	info	(22266) npm install nodessh --production (System call)
                                          
                                          AsgothianA Offline
                                          AsgothianA Offline
                                          Asgothian
                                          Developer
                                          schrieb am zuletzt editiert von
                                          #20

                                          @hansi1234 Das könnte daran liegen das das Module node-ssh heisst, nicht nodessh

                                          A.

                                          ioBroker auf RPi4 - Hardware soweit wie möglich via Zigbee.
                                          "Shit don't work" ist keine Fehlermeldung, sondern ein Fluch.

                                          1 Antwort Letzte Antwort
                                          0
                                          Antworten
                                          • In einem neuen Thema antworten
                                          Anmelden zum Antworten
                                          • Älteste zuerst
                                          • Neuste zuerst
                                          • Meiste Stimmen


                                          Support us

                                          ioBroker
                                          Community Adapters
                                          Donate

                                          557

                                          Online

                                          32.4k

                                          Benutzer

                                          81.4k

                                          Themen

                                          1.3m

                                          Beiträge
                                          Community
                                          Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen | Einwilligungseinstellungen
                                          ioBroker Community 2014-2025
                                          logo
                                          • Anmelden

                                          • Du hast noch kein Konto? Registrieren

                                          • Anmelden oder registrieren, um zu suchen
                                          • Erster Beitrag
                                            Letzter Beitrag
                                          0
                                          • Home
                                          • Aktuell
                                          • Tags
                                          • Ungelesen 0
                                          • Kategorien
                                          • Unreplied
                                          • Beliebt
                                          • GitHub
                                          • Docu
                                          • Hilfe