domotz-remote-pawn
Version:
Domotz Agent
54 lines (47 loc) • 1.68 kB
JavaScript
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;