使用Node JS

时间:2017-02-06 09:23:05

标签: node.js shell ssh

我想在一个序列中执行5个命令并记录其输出。例如。第一个命令XXXcli ip_address(这会将我连接到第三方CLI模式),下一个命令将执行一个脚本,下一个将记录输出等。但我的问题是当我通过node.js进行SSH并在ssh中生成一个shell时会话,当我执行第一个命令时,我在控制台上看不到任何输出。会话创建一个shell,一旦shell进入第三方CLI,我就不可能触发下一个命令或记录第一个命令的输出。请帮我解决这个问题。我已经坚持了很长时间

更新

我的代码:

session.on('exec', function (accept, reject, info) {
                console.log('Client wants to execute: ' + inspect(info.command));

                var stream = accept();

                     var cp = spawn('XXXCLI 10.21.254.12', {shell: true});

                     stream.stdin.pipe(cp.stdin);

                     cp.stdout.pipe(stream.stdout);

                sleep(6000);
                     cp.stderr.pipe(stream.stderr);

                     cp.on('exit', function (code, signal) {
                     stream.exit(signal || code);
                     }).on('end', function (code, signal) {
                     stream.close();

                     });


            });

当我在命令提示符中手动键入第一个命令'XXXCLI ip_address'并按回车键时,我将得到一个输出“连接到CLI ....”。一旦我成功连接此连接,我需要执行第二个命令即“Lmc sample”,它将加载主配置,我将输出为“Message sent ..”,第三个命令将执行一个脚本,将输出为“Message sent ..”。这就是当我发生的事情在cmd提示符下手动输入这些命令并执行。

一旦我在cmd中手动执行我的第一个命令,即“XXXCLI 10.21.254.12”,我们实际执行命令的路径即(C:\ users \ CLI>)将不可见。发生这种情况是因为现在它与上面提到的ip(10.21.254.12)连接。并且只有在连接到这个ip之后,我才能执行我的其他commands.ie命令来加载主配置,cmd来执行脚本等。

所以我想执行我的第一个命令并在变量中获取它的流并执行第一个命令创建的流中的其余命令 谢谢!

1 个答案:

答案 0 :(得分:0)

我使用Node.js中的Child Process修复此问题,并直接在流中编写命令。当我用Java做同样的事情时它没有工作,但它在Node.js中做了。