2013-11-25 3 views
0

Я пытаюсь подключиться к процессу, запущенному на удаленной машине. Я использовал ssh2 для подключения к машине удаления. Теперь я пытаюсь подключиться к процессу, запущенному на машине. Название процесса: dd_servicescОшибка соединения сокета NodeJs

c.exec('OmneBabble dd_servicesc',function(){} 

Я использовал приведенную выше команду кода для подключения к процессу. При подключении я хочу выполнить серию подключений. Но в настоящее время проблема заключается в том, что если я снова использую c.exec, следующая команда выполняет часть процесса и, следовательно, возвращает разрешение. Для того чтобы лучше понять, пожалуйста, проверьте ниже

OmneBabble dd_servicesc 
    >0 1 om_get_user_info 31003 1 MACLEAN1-11365 

Здесь начальная команда является OmneBabble dd_servicesc, в течение которого нужно 0 1 om_get_user_info 31003 1 MACLEAN1-11365 для выполнения. Пожалуйста, укажите любые ссылки, которые я могу найти, чтобы найти решение этой проблемы.

С уважением,

Маклин

Update 



function ssh() 
{ 
var Connection = require('ssh2'); 

var c = new Connection(); 
c.on('connect', function() { 
    console.log('Connection :: connect'); 
}); 

c.on('ready', function() { 
    console.log('Connection :: ready'); 
c.exec('OmneBabble dd_servicesc', function(err, stream) { 
    if (err) throw err; 
    stream.on('data', function(data, extended) { 
     console.log((extended === 'stderr' ? 'STDERR: ' : 'STDOUT: ') 
        + data); 
    }); 
    stream.on('end', function() { 
     console.log('Stream :: EOF'); 
    }); 
    stream.on('close', function() { 
     console.log('Stream :: close'); 
    }); 
    stream.on('exit', function(code, signal) { 
     console.log('Stream :: exit :: code: ' + code + ', signal: ' + signal); 
     c.end(); 
    }); 
    }); 
c.exec('0 1 om_get_user_info 31003 1 MACLEAN1-11365', function(err, stream) { 
    if (err) throw err; 
    stream.on('data', function(data, extended) { 
     console.log((extended === 'stderr' ? 'STDERR: ' : 'STDOUT: ') 
        + data); 
    }); 
    stream.on('end', function() { 
     console.log('Stream :: EOF'); 
    }); 
    stream.on('close', function() { 
     console.log('Stream :: close'); 
    }); 
    stream.on('exit', function(code, signal) { 
     console.log('Stream :: exit :: code: ' + code + ', signal: ' + signal); 
     c.end(); 
    }); 
    }); 
}); 

c.on('error', function(err) { 
    console.log('Connection :: error :: ' + err); 
}); 
c.on('end', function() { 
    console.log('Connection :: end'); 
}); 
c.on('close', function(had_error) { 
    console.log('Connection :: close'); 
}); 
c.connect({ 
    host: '192.168.20.204', 
    port: 22, 
    username: 'oaa', 
    password: 'marigold' 
}); 
} 
exports.ssh = ssh; 

Update: Вот OmneBabble dd_services, которые делают подключение к розетке т.е.> dd_services.

После этого мы опубликуем запрос на сокет с использованием 0 1 om_get_user_info 31003 1 MACLEAN1-11365

сокета будет затем опубликовать запрос ко всему его клиентскому процессу. Наконец, клиентский процесс, который принимает запрос, будет отвечать выходом. SO i не могу использовать дочерний процесс для сопоставления вывода родительского процесса с дочерним.

ответ

0

Не уверен, как именно вы хотите подключиться к процессам, но если сам процесс запускается через node, вы могли бы вместо того, чтобы начать их с child_process.spawn, где вы получите объект обратно и можете установить stdout, stderr и stdin , а также отправлять сигналы процессу.

EDIT:

Глядя на ваш прикрепленного код, кажется, что вы хотите, чтобы отправить вторую команду к процессу с помощью стандартного ввода, а не выполняют другую команду. Вы можете быть в состоянии трубы вашей второй команды в основной процесс в качестве исходного Exec:

c.exec('echo "0 1 om_get_user_info 31003 1 MACLEAN1-11365" | OmneBabble dd_servicesc', function... 
+0

HI, я добавил код на свой вопрос вы можете сказать мне, как добавить дочерний процесс spwan здесь. - –

+0

Я обновил свой ответ, чтобы отразить новый код. Я полагаю, что ваша проблема в том, что 'OmneBabble dd_servicesc' (я не знаю об этой команде) предоставляет среду, похожую на REPL, в которой идет ваша вторая команда. Если 'ssh2' не предоставляет интерактивный интерфейс клавиатуры, вам нужно будет выяснить, как запустить ваши две команды, не входя в CLI OmneBabble (возможно, через трубопровод, как указано выше, или отправку ввода через stdin?). –

+0

Привет, dd_Services - это сокет. В вашем ответе вы выставляете трубку вывод dd_servies на 0 1 om_get_user_info, который является запросом на сокет. Это не имеет смысла. –

0

я смог запустить интерактивную оболочку с ssh2

c.shell(function(err, stream) { 
if (err) throw err; 
stream.on('data', function(data, extended) { 


    console.log((extended === 'stderr' ? 'STDERR: ' : 'STDOUT: ') 
      + data); 
}); 

// below code to connect stdin to the remote shell 

process.stdin.resume(); 
process.stdin.on('data', function (data) { 
allowed = false; 
stream.write(data); 

Попробуйте вставить Перенаправление STDIN после вашего exec.

я узнал, как перенаправить STDIN из этого закрытого вопроса: https://github.com/mscdex/ssh2/issues/94

Смежные вопросы