UNPKG

domotz-remote-pawn

Version:

Domotz Agent

54 lines (47 loc) 1.68 kB
var SSHInfo = {}; var noOutput = {}; var childProcess = require('child_process'); const versionsRegex = /OpenSSH_(\d+\.\d+p\d+).+OpenSSL\s+(\d+\.\d+(?:\.\d+)?)/; function parseStdOut(data, stdout, logger) { if (!data) { return noOutput; } logger.debug('Parsing SSH Information: %s', data); try { var matches = data.match(versionsRegex); if (!matches[1] || !matches[2]) { return noOutput; } SSHInfo.openssh = matches[1].replace('p', '.'); SSHInfo.openssl = matches[2]; } catch (e) { logger.error('Error parsing SSH Information: %s', e); return noOutput; } const sections = stdout.trim().split(/\n(?=KEX|KEY|CIPHER|MAC)/); sections.forEach(function (section) { const lines = section.trim().split('\n'); const category = lines[0]; SSHInfo[category] = lines.slice(1); logger.debug('SSH Info %s: %s', category, JSON.stringify(SSHInfo[category]));; }); return SSHInfo; } function getSSHInformation(logger, shell) { var options = {}; if (shell) { options.shell = shell; } var q = require('q'); const command = 'ssh -V && echo KEX && ssh -Q kex && echo KEY && ssh -Q key && echo CIPHER && ssh -Q cipher && echo MAC && ssh -Q mac'; var deferred = q.defer(); childProcess.exec(command, options, function (err, stdout, stderr) { if (err) { deferred.resolve({}); } else { deferred.resolve(parseStdOut(stderr, stdout, logger)); } }); return deferred.promise; } module.exports.getSSHInformation = getSSHInformation;