远程Windows ssh上的node.js连接错误ECONNRESET

时间:2019-04-13 20:56:18

标签: javascript node.js ssh openssh ssh2

我在远程Windows服务器上安装了openssh并用腻子对其进行了测试。现在,我想通过node.js连接到远程服务器,因此安装了一个软件包“ simple-ssh”。这个软件包在远程linux服务器上也可以正常工作,但是在Windows服务器上会抛出错误。

这是我的代码文件,

var SSH = require('simple-ssh');
var ssh;
ssh = new SSH({
            host: 'XXX.XXX.XX.101',
            user: 'username',
            pass: 'password'
        });

var command = 'typeperf "\\Processor(_Total)\\% Processor Time"'

console.log('command :'+command)

ssh.exec(command, {
    out: function(stdout) {
        console.log(stdout);
    }
}).start();

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

在控制台中出现以下错误

command :typeperf "\Processor(_Total)\% Processor Time"
something went wrong.
{ Error: read ECONNRESET
    at TCP.onStreamRead (internal/stream_base_commons.js:111:27)
  errno: 'ECONNRESET',
  code: 'ECONNRESET',
  syscall: 'read',
  level: 'client-socket' }

请注意,当我通过腻子会话执行或当我将var command = 'ping -t XXX.XXX.XX.101'放入,但通过node.js脚本与var command = 'typeperf "\\Processor(_Total)\\% Processor Time"'一起执行时,它可以工作。请努力解决这个问题,因为我已经奋斗了数周。

非常感谢。

1 个答案:

答案 0 :(得分:0)

我自己解决了这个问题。经过大量的努力和成功的尝试之后,我才知道这主要是因为处理输入字符串中的双引号。我通过在双引号之前解决转义字符来解决此问题。

我改变了

var command = 'typeperf "\\Processor(_Total)\\% Processor Time"'

var command = 'typeperf \\"\\Processor(_Total)\\% Processor Time\\"'

它奏效了。 :-)