问题描述:
- 最近想通过node.js来ssh到远端server, 于是参考了ssh2的官网写法,使用时发现,多次调用后,出现了memory leak…
- 感觉conn.end()并没有被终止,每次调用都带着上一次的结果,比如第10次调用的时候,就会打印10条 “ console.log(‘Client disconnected’); ”
报错内容:
场景描述
- 远程server登录时先输入root密码,所以在stream.on(‘data’)里加了 “if”去匹配 STDIN data 的关键词,成功后输入root 密码
- 输入“who”指令,匹配要的关键字后,执行stream.close()退出
- 实测中,指令都是被执行成功的
代码如下:
"use strict";
var sshClient = require('ssh2').Client;
var conn = new sshClient();
module.exports.captureWhoAmI = function(targetIp) {
var retryMaxTimes = 30;
var connection1 = {
host: "10.99.143.66",
port: 22,
username: 'username',
password: 'password'
};
conn.on('ready', function () {
console.log('Client connected to :' + targetIp);
var num = 0;
conn.shell(function (err, stream) {
if (err) {
console.log(err)
}
stream.on('close', function (code, signal) {
stream.end();
conn.end();
}).on('data', function (data) {
num += 1;
if (num >= retryMaxTimes) {
console.error('Too many times, giving up to capture!!!');
stream.close();
}
var dataString = data.toString();
if (dataString.indexOf("Password:") != -1) {
stream.write("rootPassword\n");
stream.write("who\n");
}
if (dataString.indexOf("user") != -1) {
stream.close();
}
console.log("conn num:" + num + ":" + data);
}).stderr.on('data', function (data) {
console.log('STDERR: ' + data);
});
})
}).on('end', function() {
console.log('Client disconnected');
}).connect(connection1);
}
希望大家帮忙指点一下,多谢。