NET::SSH 中 关于要对远程执行reboot时的坑爹教训

最近在利用ruby 通过ssh的方式来操作linux机子。遇到了一个问题,就是ruby在ssh端去执行reboot命令的时候,channel断掉了,导致执行exec! (’reboot‘) 之后 就卡死,无法继续执行。然后网上查了写些资料,遂采用了exec的方式,非阻塞模式,但是奇葩的时候,这个exec执行完虽然不卡,一下就执行过,但是问题来了,reboot命令没有被执行啊,设备没有被重启。。。。。 郁闷

对于reboot命令 没有被执行,这个问题具体原因 也没有深究,但我个人感觉是因为采用了非组塞模式后,管道无法达到 ???

最后处于无奈啊

经过多次尝试,发现了一个奇葩的解决方式  。。。

在执行完exec('reboot')之后,在执行一个exec!('xxxx')  xxx任何命令都可以。  竟然可以成功了 

  ssh = Net::SSH.start("200.200.165.139", username, {:password => password , :port => port}) 

 #puts uiui

 puts ssh

 puts ssh.exec!('date') 

         rest = ssh.exec('reboot -f')

  puts ssh.exec!('date')     #加上这句之后,一切都好了

 puts rest

 puts "hello end"

相关推荐