Усеченный вывод из Nodejs ssh2-exec - PullRequest
0 голосов
/ 18 февраля 2019

Может кто-нибудь помочь мне понять, почему вывод команды ssh обрезается при использовании result[ip] = data.toString();, а не console.log(data.toString());?Я получаю только первые 50 байтов или около того для назначения объекта, но console.log получает все.Причина, по которой я использую Promise / await, заключается в том, что я планирую в конечном итоге получить доступ к нескольким хостам одновременно и получить результаты с помощью Promise.all, прежде чем двигаться дальше.

#!/usr/local/bin/node
var fs = require('fs');
var ssh_client = require('ssh2').Client;


var ssh_config = {
    port: 22,
    username: 'username',
    password: 'password',
    readyTimeout: 5000 };
var cmd = 'find /home/username -type f -iname "*.txt"';


async function main() {
    let ip = '10.10.10.110';
    let result = await sshExec(ip);
    console.log(result[ip]);
}


function sshExec(ip) {
    return new Promise(function(resolve, reject) {
        let ssh = new ssh_client();
        let config = Object.assign(ssh_config, {'host': ip});
        let result = {};

        ssh.connect(config);

        ssh.on('ready', function() {
            console.log("Connected to " + ip + ".");
            ssh.exec(cmd, function(err, stream) {
                if (err) throw err;
                stream.on('data', function(data) {
                    //console.log(data.toString());
                    result[ip] = data.toString();
                }).stderr.on('data', function(data) {
                    console.log('STDERR: ' + data);
                }).on('close', function(code, signal) {
                    ssh.end();
                });
            });
        });

        ssh.on('error', function(e) {
            console.log(ip + ', connection failed, ' + e.message);
        });

        ssh.on('close', function(hadError) {
            if (!hadError) {
                console.log('Connection to ' + ip + ' closed without errors.');
                resolve(result);
            }
            else {
                console.log('Connection to ' + ip + ' closed with errors.');
                reject(result.ip = 'failure');
            }
        });
    });
}


main();
...