node.js使用ssh连接设备并操作stream进行交互的问题

问题如下:
1.使用stream.on('data',(data)=>{do sth})这种风格时,data的值是每一行命令行的值,并不断刷新触发回调函数,我需要拿到不止一行的值才可以判断逻辑,怎么样才能拿到不止一行的值呢?比如键入一次stream.write('dis cur\r')(一条查询目标设备所有端口信息的指令,输出上百行信息)后,stream.on('data',(data)=>{do sth})是把这上百行信息中的每一行都传到data并触发回调函数。

2.上一个问题的进阶,我需要写一连串的逻辑,根据命令行返回值的不同进行下一步键入命令。
比如:stream.write('ssh 172.xx.xx.xx@xxx -p 22')(在跳板服务器上连接目标设备)
之后有2种情况:
情况一:初次登陆,会提示含有'authentication'单词的数行信息,此时我需要stream.write('yesr')才能继续。
情况二:非初次登陆,会提示含有'password'单词的数行信息,此时我需要stream.write('mypasswordr')才能继续。
这样的判断会有很多,根据键入命令后的data来进行判断。然后获取data的风格,在node.js的stream说明文档上并没有很详细的例子,请问我需要怎么写才能实现这种顺序逻辑判断呢?

附上目前的代码:

  stream.on('data',function(data) {
     if (data.toString().search('authenticity') > 0) {
       stream.write('yes\r');
     } else {
       if (data.toString().search('Password') !== -1) {
         stream.write('mypassword\r');
       } else {
         if (data.toString().search('login time') !== -1) {
           stream.write('screen-length 0 temporary\r')
           stream.write('dis cur int Eth-Trunk2.7006  \r')//查询端口信息
         } else {
           if (data.toString().search('shutdown') !== -1) {
             console.log('Bras下联口问题')
           } else{
             if(data.toString().search('shutdown') !== -1){
             
             }
           }
         }
       }
     }
   console.log(''+data);
   }).write('ssh -c 3des-cbc  xx@xx.xx.xxxx.xxxx -p 22\r');

现在的代码是对每一行的data都进行判断,但是这样会不断触发回调函数,所以接下来键入命令的逻辑感觉不应该写在这里,如果写在下面的话,我也不知道怎样才能解决问题1或者2的问题。

阅读 2.8k
1 个回答
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题