Javascript NodeJs套接字连接问题

Javascript NodeJs套接字连接问题,javascript,linux,node.js,ubuntu,Javascript,Linux,Node.js,Ubuntu,我正在尝试连接到远程计算机上运行的进程。我已使用ssh2连接到卸下机器。现在我正在尝试连接到机器中运行的进程。进程名称为dd_servicesc c.exec('OmneBabble dd_servicesc',function(){} 我使用上面的代码命令连接到进程。在连接上,我想执行一系列连接。但目前的问题是,如果我再次使用c.exec,下一个命令将在进程外执行,因此返回permission denied。为了更好地理解,请查看下面的内容 OmneBabble dd_servicesc

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

c.exec('OmneBabble dd_servicesc',function(){}
我使用上面的代码命令连接到进程。在连接上,我想执行一系列连接。但目前的问题是,如果我再次使用c.exec,下一个命令将在进程外执行,因此返回permission denied。为了更好地理解,请查看下面的内容

  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;

更新:这里是OMNEBBLE dd_服务,它连接到socket ie>dd_服务

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


然后,套接字将请求发布到其所有客户端进程。最后,接受请求的客户端进程将以输出响应。因此,我无法使用子进程将父进程的输出映射到子进程。

不确定您希望如何连接到进程,但如果进程本身是通过
节点启动的,您可以改为从中启动它们,从中返回一个对象,并可以设置
stdout
stderr
,和
stdin
,以及向进程发送信号

编辑:

查看附带的代码,您似乎希望通过stdin向进程发送第二个命令,而不是执行另一个命令。您可能可以将第二条命令作为初始执行命令导入主进程:

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

我已经能够用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:

您好,我已经在问题中添加了代码。您能告诉我如何在此处添加子进程spwan吗我已经更新了答案以反映新代码。我相信您的问题在于
OmneBabble dd_servicesc
(我以前不知道这个命令)提供了一个类似REPL的环境,您的第二个命令就是在这个环境中执行的。除非
ssh2
提供了交互式键盘界面,否则您必须弄清楚如何运行这两个命令,而无需输入
OmneBabble
的CLI(可能通过管道,如上所述,或通过stdin发送输入)。嗨,dd\u服务是一个套接字,在您的回答中,您正在将dd_服务的输出管道连接到0 1 om_get_user_info,这是对套接字的请求。这是没有道理的。如果我理解正确,
OmneBabble
会给您一个单独的提示,您可以输入一个请求(如果我错了,请纠正我)。我不确定
ssh2
是否允许这种交互式键盘输入(尽管我会在有机会时使用它)。这就是为什么我建议找到一种方法将请求导入或直接发送到stdin,这样您就不必处理任何交互式输入。