账号密码登录
微信安全登录
微信扫描二维码登录

登录后绑定QQ、微信即可实现信息互通

手机验证码登录
找回密码返回
邮箱找回 手机找回
注册账号返回
其他登录方式
分享
  • 收藏
    X
    node.js使用ssh连接设备并操作stream进行交互的问题
    30
    0

    问题如下:
    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的问题。

    0
    打赏
    收藏
    点击回答
    您的回答被采纳后将获得:提问者悬赏的 10 元积分
        全部回答
    • 0
    更多回答
    扫一扫访问手机版
    • 回到顶部
    • 回到顶部