Javascript 连接到路由器的节点SSH2

Javascript 连接到路由器的节点SSH2,javascript,node.js,ssh,npm,Javascript,Node.js,Ssh,Npm,我正在创建一个应用程序,可以在我工作时通过SSH连接到路由器,并根据与WiFi的连接记录学生的出勤情况。我有登录信息,可以打开一个终端,使用用户名和密码通过SSH进入,并运行命令获取连接设备的列表 然而,当我在Node.js中使用SSH进行设置时,我遇到了一个错误,无法运行任何命令,路由器启动了我的连接。我假设是在我尝试运行命令时,但无法证明这一点。下面是我的代码和调试日志。任何通过此过滤的帮助都将不胜感激 DEBUG: Local ident: 'SSH-2.0-ssh2js0.1.1

我正在创建一个应用程序,可以在我工作时通过SSH连接到路由器,并根据与WiFi的连接记录学生的出勤情况。我有登录信息,可以打开一个终端,使用用户名和密码通过SSH进入,并运行命令获取连接设备的列表

然而,当我在Node.js中使用SSH进行设置时,我遇到了一个错误,无法运行任何命令,路由器启动了我的连接。我假设是在我尝试运行命令时,但无法证明这一点。下面是我的代码和调试日志。任何通过此过滤的帮助都将不胜感激

    DEBUG: Local ident: 'SSH-2.0-ssh2js0.1.19'
    DEBUG: Client: Trying 192.168.0.24 on port 22 ...
    DEBUG: Client: Connected
    DEBUG: Parser: IN_INIT
    DEBUG: Parser: IN_GREETING
    DEBUG: Parser: IN_HEADER
    DEBUG: Remote ident: 'SSH-2.0-dropbear_2013.59'
    DEBUG: Outgoing: Writing KEXINIT
    DEBUG: Parser: IN_PACKETBEFORE (expecting 8)
    DEBUG: Parser: IN_PACKET
    DEBUG: Parser: pktLen:220,padLen:10,remainLen:216
    DEBUG: Parser: IN_PACKETDATA
    DEBUG: Parser: IN_PACKETDATAAFTER, packet: KEXINIT
    DEBUG: Comparing KEXINITs ...
    DEBUG: (local) KEX algorithms: ecdh-sha2-nistp256,ecdh-sha2-nistp384,ecdh-sha2-nistp521,diffie-hellman-group-exchange-sha256,diffie-hellman-group14-sha1
    DEBUG: (remote) KEX algorithms: diffie-hellman-group1-sha1,diffie-hellman-group14-sha1,kexguess2@matt.ucc.asn.au
    DEBUG: KEX algorithm: diffie-hellman-group14-sha1
    DEBUG: (local) Host key formats: ssh-rsa,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521
    DEBUG: (remote) Host key formats: ssh-rsa
    DEBUG: Host key format: ssh-rsa
    DEBUG: (local) Client->Server ciphers: aes128-ctr,aes192-ctr,aes256-ctr,arcfour256,arcfour128,aes128-cbc,3des-cbc,blowfish-cbc,cast128-cbc,aes192-cbc,aes256-cbc,arcfour
    DEBUG: (remote) Client->Server ciphers: 3des-ctr,3des-cbc
    DEBUG: Client->Server Cipher: 3des-cbc
    DEBUG: (local) Server->Client ciphers: aes128-ctr,aes192-ctr,aes256-ctr,arcfour256,arcfour128,aes128-cbc,3des-cbc,blowfish-cbc,cast128-cbc,aes192-cbc,aes256-cbc,arcfour
    DEBUG: (remote) Server->Client ciphers: 3des-ctr,3des-cbc
    DEBUG: Server->Client Cipher: 3des-cbc
    DEBUG: (local) Client->Server HMAC algorithms: hmac-sha2-256,hmac-sha2-512,hmac-sha1,hmac-sha1-96
    DEBUG: (remote) Client->Server HMAC algorithms: hmac-sha1
    DEBUG: Client->Server HMAC algorithm: hmac-sha1
    DEBUG: (local) Server->Client HMAC algorithms: hmac-sha2-256,hmac-sha2-512,hmac-sha1,hmac-sha1-96
    DEBUG: (remote) Server->Client HMAC algorithms: hmac-sha1
    DEBUG: Server->Client HMAC algorithm: hmac-sha1
    DEBUG: (local) Client->Server compression algorithms: none,zlib@openssh.com,zlib
    DEBUG: (remote) Client->Server compression algorithms: none
    DEBUG: Client->Server compression algorithm: none
    DEBUG: (local) Server->Client compression algorithms: none,zlib@openssh.com,zlib
    DEBUG: (remote) Server->Client compression algorithms: none
    DEBUG: Server->Client compression algorithm: none
    DEBUG: Outgoing: Writing KEXDH_INIT
    DEBUG: Parser: IN_PACKETBEFORE (expecting 8)
    DEBUG: Parser: IN_PACKET
    DEBUG: Parser: pktLen:572,padLen:4,remainLen:568
    DEBUG: Parser: IN_PACKETDATA
    DEBUG: Parser: IN_PACKETDATAAFTER, packet: KEXDH_REPLY
    DEBUG: Checking host key format
    DEBUG: Checking signature format
    DEBUG: Verifying host fingerprint
    DEBUG: Host accepted by default (no verification)
    DEBUG: Verifying signature
    DEBUG: Outgoing: Writing NEWKEYS
    DEBUG: Parser: IN_PACKETBEFORE (expecting 8)
    DEBUG: Parser: IN_PACKET
    DEBUG: Parser: pktLen:12,padLen:10,remainLen:8
    DEBUG: Parser: IN_PACKETDATA
    DEBUG: Parser: IN_PACKETDATAAFTER, packet: NEWKEYS
    DEBUG: Outgoing: Writing SERVICE_REQUEST (ssh-userauth)
    DEBUG: Parser: IN_PACKETBEFORE (expecting 8)
    DEBUG: Parser: IN_PACKET
    DEBUG: Parser: Decrypting
    DEBUG: Parser: pktLen:28,padLen:10,remainLen:24
    DEBUG: Parser: IN_PACKETDATA
    DEBUG: Parser: Decrypting
    DEBUG: Parser: HMAC size:20
    DEBUG: Parser: IN_PACKETDATAVERIFY
    DEBUG: Parser: Verifying MAC
    DEBUG: Parser: IN_PACKETDATAVERIFY (Valid HMAC)
    DEBUG: Parser: IN_PACKETDATAAFTER, packet: SERVICE_ACCEPT
    DEBUG: Outgoing: Writing USERAUTH_REQUEST (none)
    DEBUG: Parser: IN_PACKETBEFORE (expecting 8)
    DEBUG: Parser: IN_PACKET
    DEBUG: Parser: Decrypting
    DEBUG: Parser: pktLen:20,padLen:5,remainLen:16
    DEBUG: Parser: IN_PACKETDATA
    DEBUG: Parser: Decrypting
    DEBUG: Parser: HMAC size:20
    DEBUG: Parser: IN_PACKETDATAVERIFY
    DEBUG: Parser: Verifying MAC
    DEBUG: Parser: IN_PACKETDATAVERIFY (Valid HMAC)
    DEBUG: Parser: IN_PACKETDATAAFTER, packet: USERAUTH_FAILURE
    DEBUG: Client: none auth failed
    DEBUG: Outgoing: Writing USERAUTH_REQUEST (password)
    DEBUG: Parser: IN_PACKETBEFORE (expecting 8)
    DEBUG: Parser: IN_PACKET
    DEBUG: Parser: Decrypting
    DEBUG: Parser: pktLen:12,padLen:10,remainLen:8
    DEBUG: Parser: IN_PACKETDATA
    DEBUG: Parser: Decrypting
    DEBUG: Parser: HMAC size:20
    DEBUG: Parser: IN_PACKETDATAVERIFY
    DEBUG: Parser: Verifying MAC
    DEBUG: Parser: IN_PACKETDATAVERIFY (Valid HMAC)
    DEBUG: Parser: IN_PACKETDATAAFTER, packet: USERAUTH_SUCCESS
    Client :: ready
    DEBUG: Outgoing: Writing CHANNEL_OPEN (0, session)
    DEBUG: Parser: IN_PACKETBEFORE (expecting 8)
    DEBUG: Parser: IN_PACKET
    DEBUG: Parser: Decrypting
    DEBUG: Parser: pktLen:28,padLen:10,remainLen:24
    DEBUG: Parser: IN_PACKETDATA
    DEBUG: Parser: Decrypting
    DEBUG: Parser: HMAC size:20
    DEBUG: Parser: IN_PACKETDATAVERIFY
    DEBUG: Parser: Verifying MAC
    DEBUG: Parser: IN_PACKETDATAVERIFY (Valid HMAC)
    DEBUG: Parser: IN_PACKETDATAAFTER, packet: CHANNEL_OPEN_CONFIRMATION
    DEBUG: Outgoing: Writing CHANNEL_REQUEST (0, exec)
    DEBUG: Parser: IN_PACKETBEFORE (expecting 8)
    DEBUG: Parser: IN_PACKET
    DEBUG: Parser: Decrypting
    DEBUG: Parser: pktLen:12,padLen:6,remainLen:8
    DEBUG: Parser: IN_PACKETDATA
    DEBUG: Parser: Decrypting
    DEBUG: Parser: HMAC size:20
    DEBUG: Parser: IN_PACKETDATAVERIFY
    DEBUG: Parser: Verifying MAC
    DEBUG: Parser: IN_PACKETDATAVERIFY (Valid HMAC)
    DEBUG: Parser: IN_PACKETDATAAFTER, packet: CHANNEL_SUCCESS (0)
    DEBUG: Outgoing: Writing CHANNEL_DATA (0)
    DEBUG: Outgoing: Writing CHANNEL_EOF (0)
    DEBUG: Parser: IN_PACKETBEFORE (expecting 8)
    DEBUG: Parser: IN_PACKET
    DEBUG: Parser: Decrypting
    DEBUG: Parser: pktLen:28,padLen:6,remainLen:24
    DEBUG: Parser: IN_PACKETDATA
    DEBUG: Parser: Decrypting
    DEBUG: Parser: HMAC size:20
    DEBUG: Parser: IN_PACKETDATAVERIFY
    DEBUG: Parser: Verifying MAC
    DEBUG: Parser: IN_PACKETDATAVERIFY (Valid HMAC)
    DEBUG: Parser: IN_PACKETDATAAFTER, packet: CHANNEL_EXTENDED_DATA (0)
    STDERR: Aborted

    DEBUG: Parser: IN_PACKETBEFORE (expecting 8)
    DEBUG: Parser: IN_PACKET
    DEBUG: Parser: Decrypting
    DEBUG: Parser: pktLen:12,padLen:6,remainLen:8
    DEBUG: Parser: IN_PACKETDATA
    DEBUG: Parser: Decrypting
    DEBUG: Parser: HMAC size:20
    DEBUG: Parser: IN_PACKETDATAVERIFY
    DEBUG: Parser: Verifying MAC
    DEBUG: Parser: IN_PACKETDATAVERIFY (Valid HMAC)
    DEBUG: Parser: IN_PACKETDATAAFTER, packet: CHANNEL_EOF (0)
    DEBUG: Parser: IN_PACKETBEFORE (expecting 8)
    DEBUG: Parser: IN_PACKET
    DEBUG: Parser: Decrypting
    DEBUG: Parser: pktLen:36,padLen:10,remainLen:32
    DEBUG: Parser: IN_PACKETDATA
    DEBUG: Parser: Decrypting
    DEBUG: Parser: HMAC size:20
    DEBUG: Parser: IN_PACKETDATAVERIFY
    DEBUG: Parser: Verifying MAC
    DEBUG: Parser: IN_PACKETDATAVERIFY (Valid HMAC)
    DEBUG: Parser: IN_PACKETDATAAFTER, packet: CHANNEL_REQUEST (0, exit-status)
    DEBUG: Parser: IN_PACKETBEFORE (expecting 8)
    DEBUG: Parser: IN_PACKET
    DEBUG: Parser: Decrypting
    DEBUG: Parser: pktLen:12,padLen:6,remainLen:8
    DEBUG: Parser: IN_PACKETDATA
    DEBUG: Parser: Decrypting

DEBUG: Parser: HMAC size:20
DEBUG: Parser: IN_PACKETDATAVERIFY
DEBUG: Parser: Verifying MAC
DEBUG: Parser: IN_PACKETDATAVERIFY (Valid HMAC)
DEBUG: Parser: IN_PACKETDATAAFTER, packet: CHANNEL_CLOSE (0)
DEBUG: Outgoing: Writing CHANNEL_CLOSE (0)
DEBUG: Parser: IN_PACKETBEFORE (expecting 8)
Stream :: close

DEBUG: Outgoing: Writing DISCONNECT (BY_APPLICATION)

是否尝试删除流.end('ls-l\nexit\n')?通常情况下,对于
exec()
(除非您使用
exec()
执行bash,这并不常见)。我确实尝试删除了该行,但据我所知,我得到了相同的错误。
stream.end()
仍然被删除,如果远程进程需要tty,您可以尝试使用pty:
conn.exec('show clients',{pty:true},function(err,stream){…})
太棒了,多亏您的帮助,我已经连接到路由器了。但现在它不会运行我作为第一个参数“show clients”的命令。不过,我确实从终端获得了一些输出。我得到路由器的Mac地址,后面有#。输入命令时,文本位于每一新行之前。连接保持打开状态,但我无法键入任何命令并让它们执行。如果可能的话,我只希望运行“show clients”,然后连接就可以关闭。您是否尝试删除
stream.end('ls-l\nexit\n')?通常情况下,对于
exec()
(除非您使用
exec()
执行bash,这并不常见)。我确实尝试删除了该行,但据我所知,我得到了相同的错误。
stream.end()
仍然被删除,如果远程进程需要tty,您可以尝试使用pty:
conn.exec('show clients',{pty:true},function(err,stream){…})
太棒了,多亏您的帮助,我已经连接到路由器了。但现在它不会运行我作为第一个参数“show clients”的命令。不过,我确实从终端获得了一些输出。我得到路由器的Mac地址,后面有#。输入命令时,文本位于每一新行之前。连接保持打开状态,但我无法键入任何命令并让它们执行。如果可能,我只希望“显示客户端”运行,然后连接可以关闭。
const express = require('express'),
  Client = require('ssh2').Client;

let MacAdresses = [];
let conn = new Client();

conn.on('ready', () => {
  console.log('Client :: ready');
  conn.exec('show clients', function(err, stream) {
    if (err) throw err;
    stream.on('close', function() {
      console.log('Stream :: close');
      console.log(MacAdresses.toString('utf8'));
      conn.end();
    }).on('data', function(data) {
      console.log('asfasfsaf', data)
      MacAdresses.push(data);
      console.log('STDOUT: ' + data);
    }).stderr.on('data', function(data) {
      console.log('STDERR: ' + data);
    });
    stream.end('ls -l\nexit\n');
  });
}).connect({
  host: '192.168.0.24',
  port: 22,
  username: '******',
  password: '******',
  debug: console.log,
  algorithms: {
    cipher : [
      'aes128-ctr','aes192-ctr','aes256-ctr','arcfour256','arcfour128',
                'aes128-cbc','3des-cbc','blowfish-cbc','cast128-cbc','aes192-cbc',
                'aes256-cbc','arcfour'],
    hmac: ['hmac-sha2-256', 'hmac-sha2-512', 'hmac-sha1', 'hmac-sha1-96']
}
});