NodeJs套接字连接问题

时间:2013-11-25 08:14:10

标签: javascript linux node.js ubuntu

我正在尝试连接到远程计算机上运行的进程。我已经使用ssh2连接到删除机器。现在我正在尝试连接到机器中运行的进程。进程名称为dd_servicesc

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;

更新:这里与插座建立连接的OmneBabble dd_services即> dd_services。

之后我们将使用0发布对套接字的请求1 om_get_user_info 31003 1 MACLEAN1-11365

然后,Socket会将请求发布到其所有客户端进程。最后,接受请求的客户端进程将响应输出。所以我不能使用子进程将父进程的输出映射到子进程。

2 个答案:

答案 0 :(得分:0)

不确定您想要如何连接到流程,但如果流程本身是通过node启动的,那么您可以使用child_process.spawn启动它们,在那里您可以获得一个对象并可以设置stdoutstderrstdin,以及向流程发送信号。

编辑:

查看附加的代码,您似乎希望通过stdin将第二个命令发送到进程,而不是执行另一个命令。您可以将第二个命令作为初始exec传递给主进程:

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

答案 1 :(得分:0)

我已经能够使用ssh2

运行交互式shell
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);

尝试在exec语句后插入STDIN重定向。

我学会了如何从这个封闭的问题重定向STDIN: https://github.com/mscdex/ssh2/issues/94