簡體   English   中英

NodeJs套接字連接問題

[英]NodeJs Socket Connection Issue

我正在嘗試連接到在遠程計算機上運行的進程。 我已經使用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向套接字發布請求

然后,套接字將請求發布到其所有客戶端進程。 最后,接受請求的客戶進程將以輸出響應。 所以我不能使用子進程將父進程的輸出映射到子進程。

不確定要如何連接到進程,但是如果進程本身是通過node啟動的,則可以使用child_process.spawn來啟動它們,在其中您可以返回對象並可以將stdoutstderrstdin為以及向過程發送信號。

編輯:

查看您的附加代碼,似乎您想通過stdin將第二條命令發送到進程,而不是執行另一條命令。 您也許可以將第二個命令作為初始exec傳遞到主進程中:

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: https : //github.com/mscdex/ssh2/issues/94

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM