05.05.2016, 02:59
|
Кандидат Javascript-наук
|
|
Регистрация: 05.05.2016
Сообщений: 103
|
|
помощь в скрипте подключения ssh (multi)
Добрую ночь, вообщем нужна помощь, необходимо, что бы подключение было из массива, то есть что бы было мульти подключения к ssh ( более 1 подключения с разными параметрами подключения)
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, 05.05.2016 в 03:35.
|
|
05.05.2016, 07:57
|
Профессор
|
|
Регистрация: 27.11.2015
Сообщений: 2,899
|
|
SpaceAlarm,
Вопрос #1 - зачем вам несколько ssh соединений?
|
|
05.05.2016, 13:09
|
Кандидат Javascript-наук
|
|
Регистрация: 05.05.2016
Сообщений: 103
|
|
Потому что эта функция будет вызвана при определенном событии, а функция должна будет уже отправить на несколько серверов одинаковую команду
|
|
05.05.2016, 14:49
|
Профессор
|
|
Регистрация: 27.11.2015
Сообщений: 2,899
|
|
Сообщение от SpaceAlarm
|
Потому что эта функция будет вызвана при определенном событии, а функция должна будет уже отправить на несколько серверов одинаковую команду
|
Ну тогда, во-первых, у вас неправильное присвоение Значений элементам массива:
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
|
|
05.05.2016, 14:56
|
Кандидат Javascript-наук
|
|
Регистрация: 05.05.2016
Сообщений: 103
|
|
Как примерно должно хотя бы быть? я просто только начал работать с js..
var hostParamsArray = new Array();
hostParamsArray[0] = { host: '', port: 22, username: '', password: '' };
hostParamsArray[1] = { host: '', port: 22, username: '', password: '' };
Последний раз редактировалось SpaceAlarm, 05.05.2016 в 15:00.
|
|
05.05.2016, 15:11
|
Профессор
|
|
Регистрация: 27.11.2015
Сообщений: 2,899
|
|
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))
и т.д.
Не забывайте ставить ; в конце строк - для разделения операторов
Последний раз редактировалось Dilettante_Pro, 05.05.2016 в 15:16.
|
|
05.05.2016, 15:21
|
Кандидат Javascript-наук
|
|
Регистрация: 05.05.2016
Сообщений: 103
|
|
А как будет примерно выглядеть если брать ип для подключения из таблицы бд ?
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, 05.05.2016 в 15:38.
|
|
05.05.2016, 15:42
|
Профессор
|
|
Регистрация: 27.11.2015
Сообщений: 2,899
|
|
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: '' };
- так и есть? или подставлены значения?
|
|
05.05.2016, 15:44
|
Профессор
|
|
Регистрация: 27.11.2015
Сообщений: 2,899
|
|
SpaceAlarm,
В конце строки 28 по идее должна быть ;
|
|
05.05.2016, 15:49
|
Кандидат Javascript-наук
|
|
Регистрация: 05.05.2016
Сообщений: 103
|
|
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
|
|
|
|