Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. JavaScript
    5. Routerzugriff mit SSH; Gibt es da schon was?

    NEWS

    • ioBroker@Smart Living Forum Solingen, 14.06. - Agenda added

    • ioBroker goes Matter ... Matter Adapter in Stable

    • Monatsrückblick - April 2025

    Routerzugriff mit SSH; Gibt es da schon was?

    This topic has been deleted. Only users with topic management privileges can see it.
    • M
      mrieglhofer last edited by

      Hallo
      Leider halten sich meine Erfahrungen mit JS sehr in Grenzen. Daher komme ich da nicht weiter.

      Ich habe einen Draytek Router, der problemlos über SSH konfiguriert und bedient werden kann. Die Befehle sind dokumentiert.
      Der Gedanke, nachdem es keinen Adapter dafür gibt, wäre mit JS auf SSH zuzufgreifen und dort quasi einen Dialog zu simulieren. Änderungen am Router hinsichtlich Keys sind nicht möglich.
      Direkt am PI sollte es mit SSH und dem Expect Packet machbar sein.

      Anforderungen:
      Login mit ssh <user>@<ip> -c <crypt>
      Passwort: <Passwort> (kommt eine Meldung wegen Keys, dann Yes)
      danach warten auf Prompt und Befehl wie sys reboot usw. Der Rest ist dann eh simpel, weil es immer gleich läuft.

      Hat da jemand vielleicht ein Muster, Vorlage oder so etwas, wie ich das angehen könnte. An sich wäre das ja auch eine Idee für einen Universal SSH Adapter, da viele Router über SSH gesteuert werden können und nach dem Login daher nur der Dialog anders konfiguriert werden müsste.

      Wäre nett, wenn jemand helfen könnte.

      AlCalzone 1 Reply Last reply Reply Quote 0
      • AlCalzone
        AlCalzone Developer @mrieglhofer last edited by

        @mrieglhofer Das geht mit dem Skript-Adapter und https://www.npmjs.com/package/node-ssh

        1 Reply Last reply Reply Quote 0
        • M
          mrieglhofer last edited by

          Verstehe ich das richtig? Wenn ich das node package installiere, kann ich aus dem Script Adapter darauf zugreifen? Den Rest muss ich mir in Ruhe in der Doku anschauen und probieren.

          AlCalzone 1 Reply Last reply Reply Quote 0
          • AlCalzone
            AlCalzone Developer @mrieglhofer last edited by

            @mrieglhofer Du musst es in der Konfiguration des Skript-Adapters bei "zusätzliche Module" eintragen, dann kannst du es im Skript per require("node-ssh") laden.

            1 Reply Last reply Reply Quote 0
            • M
              mrieglhofer last edited by

              Danke.
              Noch eine Frage: in welches Verzeichnis gehört das Modul. Ich habe es nämlich gerade versehentlich in die Wurzel installiert (wegen der Fehler dann mit Sudo) und Uninstall lässt den ganzen Müll leider dort). Hatte einige Probleme, es dort wieder los zu werden. 😉 Gottlob habe ich immer ein Backup-Karte.
              Beim IoBroker unter nodes_modules oder unter /opt/iobroker/node_modules/iobroker.javascript/node_modules

              AlCalzone 1 Reply Last reply Reply Quote 0
              • AlCalzone
                AlCalzone Developer @mrieglhofer last edited by

                @mrieglhofer Nicht manuell installieren! Da steht es:

                @AlCalzone sagte in Routerzugriff mit SSH; Gibt es da schon was?:

                Du musst es in der Konfiguration des Skript-Adapters bei "zusätzliche Module" eintragen

                M 1 Reply Last reply Reply Quote 0
                • M
                  mrieglhofer @AlCalzone last edited by mrieglhofer

                  @AlCalzone

                  Danke, war für nicht so klar, dass man das nicht installieren muss. Bei den meisten Sprachen musst ja das Modul zuerst installieren, bevor du drauf zugreifen kannst. Naja, ist schon länger her 😉
                  Zumindest schreit im Moment nichts. Da kann ich mich jetzt mal weiter einlesen und probieren.

                  AlCalzone 1 Reply Last reply Reply Quote 0
                  • AlCalzone
                    AlCalzone Developer @mrieglhofer last edited by

                    @mrieglhofer das schon, aber der Adapter macht das für dich. Ohne die Einstellung würde es beim adapter update verloren gehen

                    M 1 Reply Last reply Reply Quote 0
                    • M
                      mrieglhofer @AlCalzone last edited by

                      @AlCalzone
                      Heisst also. alle node Packete unter JavaScript so verwalten.

                      Jetzt habe ich mal das Connect hingebracht. Der Router wollte nur 3des-cbc.
                      Jetzt bekomme ich zumindest mal connected. Mehr sehe ich im Router leider auch nicht

                      Aber jetzt hänge ich an der Frage, wie kann ich ihm jetzt Befehle schicken. Was so im Internet rumgeistert, hat zu keiner Lösung geführt. Gibt da irgendein Muster. Sonst sehe ich als module expect. Könnte ich damit weiterkommen?

                      var node_ssh
                      
                      node_ssh = require('node-ssh')
                      ssh = new node_ssh()
                      password='xxxxx'
                      
                      function test(line){
                          console.log('stdout: ' + line)
                          };
                      
                      ssh.connect({
                        host: '192.168.2.1',
                        username: 'admin',
                        port: 22,
                        password,
                          algorithms: {
                              cipher: [
                              '3des-cbc'
                          ]
                        },
                        tryKeyboard: true,
                        debug: test,
                        onKeyboardInteractive: (name, instructions, instructionsLang, prompts, finish) => {
                            if (prompts.length > 0 && prompts[0].prompt.toLowerCase().includes('password')) {
                              finish([password])
                            }
                          }
                      })
                      
                      14:10:03.524	info	javascript.1 (4859) Stop script script.js.Test.SSH
                      14:10:07.718	info	javascript.1 (4859) Start javascript script.js.Test.SSH
                      14:10:07.726	info	javascript.1 (4859) script.js.Test.SSH: registered 0 subscriptions and 0 schedules
                      14:10:07.728	info	javascript.1 (4859) script.js.Test.SSH: stdout: DEBUG: Local ident: 'SSH-2.0-ssh2js0.4.8'
                      14:10:07.728	info	javascript.1 (4859) script.js.Test.SSH: stdout: DEBUG: Client: Trying 192.168.2.1 on port 22 ...
                      14:10:07.732	info	javascript.1 (4859) script.js.Test.SSH: stdout: DEBUG: Client: Connected
                      14:10:07.734	info	javascript.1 (4859) script.js.Test.SSH: stdout: DEBUG: Parser: IN_INIT
                      
                      AlCalzone 1 Reply Last reply Reply Quote 0
                      • AlCalzone
                        AlCalzone Developer @mrieglhofer last edited by AlCalzone

                        @mrieglhofer Z.B. so. Aus Gründen der Lesbarkeit bevorzuge ich async/await über die .then-Beispiel aus der Doku

                        const node_ssh = require("node-ssh");
                        const ssh = new node_ssh();
                        
                        const password = "xxxxx";
                        
                        async function main() {
                        
                        	await ssh.connect({
                        		host: "192.168.2.1",
                        		username: "admin",
                        		port: 22,
                        		password,
                        		algorithms: {
                        			cipher: ["3des-cbc"]
                        		},
                        		tryKeyboard: true,
                        		onKeyboardInteractive: (name, instructions, instructionsLang, prompts, finish) => {
                        			if (prompts.length > 0 && prompts[0].prompt.toLowerCase().includes('password')) {
                        				finish([password])
                        			}
                        		}
                        	});
                        
                        	const result1 = await ssh.execCommand('befehl', { cwd: '/pfad/zum/workdir' });
                        	log('STDOUT: ' + result1.stdout);
                        	log('STDERR: ' + result1.stderr);
                        
                        	// Weitere Befehle...
                        
                        }
                        main();
                        
                        1 Reply Last reply Reply Quote 0
                        • First post
                          Last post

                        Support us

                        ioBroker
                        Community Adapters
                        Donate

                        571
                        Online

                        31.7k
                        Users

                        79.7k
                        Topics

                        1.3m
                        Posts

                        javascript
                        2
                        10
                        705
                        Loading More Posts
                        • Oldest to Newest
                        • Newest to Oldest
                        • Most Votes
                        Reply
                        • Reply as topic
                        Log in to reply
                        Community
                        Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
                        The ioBroker Community 2014-2023
                        logo