помощь в скрипте подключения ssh (multi)
Добрую ночь, вообщем нужна помощь, необходимо, что бы подключение было из массива, то есть что бы было мульти подключения к ssh ( более 1 подключения с разными параметрами подключения) :help:
function tested(){ var hostParamsArray = new Array(); hostParamsArray = { host: '', port: 22, username: '', password: '' }; hostParamsArray = { host: '', port: 22, username: '', password: '' }; var command = "", conn = new Client() conn.on('ready', function() { logger.info('SSH Successful connection: '+ hostParamsArray.host + ' Server#1') command = 'touch tesst.log' conn.exec(command,function(err, stream) { if (err) throw err; stream.on('close', function() { console.log('Stream :: close'); conn.end(); }).on('data', function(data) { console.log('STDOUT: ' + data); }).stderr.on('data', function(data) { console.log('STDERR: ' + data); }); }); }).connect(hostParamsArray) conn.on('error', function(err) { console.log(err) }); } |
SpaceAlarm,
Вопрос #1 - зачем вам несколько ssh соединений? |
Потому что эта функция будет вызвана при определенном событии, а функция должна будет уже отправить на несколько серверов одинаковую команду
|
Цитата:
var hostParamsArray = new Array(); hostParamsArray = { host: '', port: 22, username: '', password: '' }; hostParamsArray = { host: '', port: 22, username: '', password: '' }; Смотри http://www.on-line-teaching.com/js/js.arrays.htm Во-вторых - conn тоже должны быть массивом и создаваться в цикле с использованием соответствующего hostParamsArray |
Как примерно должно хотя бы быть? я просто только начал работать с js..
var hostParamsArray = new Array(); hostParamsArray[0] = { host: '', port: 22, username: '', password: '' }; hostParamsArray[1] = { host: '', port: 22, username: '', password: '' }; |
SpaceAlarm,
Примерно так. Можно использовать push. А потом var command = "", conn = []; for (var i = 0; i < hostParamsArray.length; i++) { conn[i] = new Client(); conn[i].on('ready', function() { logger.info('SSH Successful connection: '+ hostParamsArray[i].host + ' Server#' +(i + 1)) и т.д. Не забывайте ставить ; в конце строк - для разделения операторов |
А как будет примерно выглядеть если брать ип для подключения из таблицы бд ?
function server1 (){ var hostParamsArray = new Array(); hostParamsArray[0] = { host: '', port: 22, username: '', password: '' }; hostParamsArray[1] = { host: '', port: 22, username: '', password: '' }; var command = "", conn = []; for (var i = 0; i < hostParamsArray.length; i++) { conn[i] = new Client(); conn[i].on('ready', function() { logger.info('SSH Successful connection: Server#' +(i + 1)) command= "touch test.log"; conn[i].exec(command,function(err, stream) { if (err) throw err; stream.on('close', function() { console.log('Stream :: close'); conn[i].end(); }).on('data', function(data) { console.log('STDOUT: ' + data); if(data.indexOf('123') + 1){ logger.info('Update'); } }).stderr.on('data', function(data) { console.log('STDERR: ' + data); }); }); }).connect(hostParamsArray[i]) conn.on[i]('error', function(err) { console.log(err); }); }} А что сейчас не так? throw new Error('Invalid username'); ^ |
SpaceAlarm,
Строка 14 conn[i].exec(command,function(err, stream) { command в вашем варианте - массив, а здесь - простая переменная Лучше переделайте command в простую переменную - как массив она (пока что - может, в дальнейшем будут разные команды) не нужна. Строка 29 conn.on[i]('error', function(err) { - не там индексные скобки. А в параметрах у вас hostParamsArray[0] = { host: '', port: 22, username: '', password: '' }; - так и есть? или подставлены значения? |
SpaceAlarm,
В конце строки 28 по идее должна быть ; |
function server1 (){ var hostParamsArray = new Array(); hostParamsArray[0] = { host: '', port: 22, username: '', password: '' }; hostParamsArray[1] = { host: '', port: 22, username: '', password: '' }; var command = "", conn = []; for (var i = 0; i < hostParamsArray.length; i++) { conn[i] = new Client(); conn[i].on('ready', function() { logger.info('SSH Successful connection: Server#' +(i + 1)) command = "touch test.log"; conn[i].exec(command,function(err, stream) { if (err) throw err; stream.on('close', function() { console.log('Stream :: close'); conn[i].end(); }).on('data', function(data) { console.log('STDOUT: ' + data); if(data.indexOf('123') + 1){ logger.info('Update'); } }).stderr.on('data', function(data) { console.log('STDERR: ' + data); }); }); }).connect(hostParamsArray[i]) conn[i].on('error', function(err) { console.log(err); }); }} Значения в параметрах подключения естественно подставлены) conn[i].exec(command,function(err, stream) { ^ TypeError: Cannot read property 'exec' of undefined |
SpaceAlarm,
А вы ssh по одному каналу запускали? new Client() у вас откуда? Из какой библиотеки? |
var Client = require('ssh2').Client;
|
SpaceAlarm,
А вы ssh по одному каналу подключали? |
Не совсем понял, в смысле по одному?
Вы про массив? |
SpaceAlarm,
Просто по одному каналу, без всяких массивов |
Да, естественно, по 1 работает
|
SpaceAlarm,
В строке 11 в конце надо ; Внимательно просмотрите все скобочки, лучше в редакторе с форматированием скрипта |
нет, проблема та же осталась
conn[i].exec(command,function(err, stream) { ^ TypeError: Cannot read property 'exec' of undefined |
Цитата:
conn[i] = new Client(); conn[i].on('ready', function() { Идут без ошибок:( ??? Может, вам попробовать обратиться в раздел NODE.JS http://javascript.ru/forum/node-js-io-js/ ? |
как видишь :(
function server1 (){ var hostParamsArray = new Array(); hostParamsArray[0] = { host: '', port: 22, username: '', password: '' }; hostParamsArray[1] = { host: '', port: 22, username: '', password: '' }; var command = "", conn = []; for (var i = 0; i < hostParamsArray.length; i++) { conn[i] = new Client(); conn[i].on('ready', function() { logger.info('SSH Successful connection: Server#' +(i + 1)); command = "touch test.log"; conn[i].exec(command,function(err, stream) { if (err) throw err; stream.on('close', function() { console.log('Stream :: close'); conn[i].end(); }).on('data', function(data) { console.log('STDOUT: ' + data); if(data.indexOf('123') + 1){ logger.info('Update'); } }).stderr.on('data', function(data) { console.log('STDERR: ' + data); }); }); }).connect(hostParamsArray[i]) conn[i].on('error', function(err) { console.log(err); }); }} conn[i].exec(command,function(err, stream) { ^ TypeError: Cannot read property 'exec' of undefined в том разделе почти не помогают.. |
SpaceAlarm,
А где у вас находится var Client = require('ssh2').Client;? Попробуйте вставить в функцию function server1 (){ |
conn[i].exec(command,function(err, stream) { ^ TypeError: Cannot read property 'exec' of undefined Ошибка исправлена путем: this.exec(command,function(err, stream) { |
Часовой пояс GMT +3, время: 15:54. |