首页 > 解决方案 > Node.js 错误:使用 ssh2 读取 ECONNRESET

问题描述

我正在尝试使用 npm 中的 ssh2 来设置 ssh 连接并远程登录到机器。该代码适用于 Windows 到 Linux/MacOS 的连接,但对于 Windows 到 Windows 的连接失败(已附上错误屏幕截图)。我确实找到了与可能导致问题的代理和代理转发参数相关的内容,但找不到解决方案。节点版本:8.11.2
任何帮助将不胜感激!谢谢!代码如下:

app.get("/",function(req,res)
{
    var conn = new Client();
    conn.on('ready', function() 
    {
        console.log('Client :: ready');
        conn.exec('systeminfo', function(err, stream) 
        {//system_profiler SPHardwareDataType, systeminfo
            if (err) console.log(err);
            stream.on('close', function(code, signal) 
            {
            console.log('Stream :: close :: code: ' + code + ', signal: ' + signal);
            conn.end();
            }).on('data', function(data) 
            {
                console.log('STDOUT: ' + data);
            }).stderr.on('data', function(data) 
            {
                console.log('STDERR: ' + data);
            });
        });
    }).connect({
    host: '127.0.0.1',
    port: 22,
    username: 'inspiron',
    privateKey: require('fs').readFileSync('C:/Users/inspiron/Downloads/private_key.ppk')
    });
    res.send(str);
});

这是错误消息:

在此处输入图像描述

标签: javascriptnode.jsnpm

解决方案


我也有类似的问题。

events.js:183
      throw er; // Unhandled 'error' event
      ^

Error: read ECONNRESET
    at _errnoException (util.js:992:11)
    at TCP.onread (net.js:618:25)

虽然我增加了一些延迟,但它以某种方式起作用。

stream.on('close', function(code, signal){
  console.log('Stream :: close :: code: ' + code + ', signal: ' + signal);
  //extra lines of code here..
  conn.end();
}

添加一些延迟或try-catch语句;还有“stream.on('data', function(data) {...

stream.on('close', function(code, signal){
  console.log('Stream :: close :: code: ' + code + ', signal: ' + signal);
  //var newvar = oldvar;

  setTimeout(function() {
    conn.end();
    //use the newvar here..
    //extra lines of code..
  },100);
}

推荐阅读