问题我用Net:Telnet尝试去连接windows2008,并执行命令,但是出现一些很诡异的问题,
如果我执行
tn = Net::Telnet::new("Host"=>"walnutserver","Port"=>2300,"Prompt"=> /C:.*>/)tn.login("user","pass")tn.cmd("dir")tn.cmd("dir")
第一个tn.cmd(“dir”) 能正常运行,而第二个tn.cmd(“dir”) 抛出异常,并且后继无论执行什么命令都是失败的,返回nil。其中,经过实验,无论是什么cmd命令(不只dir命令),都会出现相同的问题,执行一个之后,后继的操作都会失败。异常如下:
Timeout::Error: timed out while waiting for more data from c:/troy/data/chef/chef-client11/chef/embedded/lib/ruby/1.9.1/net/telnet.rb:558:in `waitfor' from c:/troy/data/chef/chef-client11/chef/embedded/lib/ruby/1.9.1/net/telnet.rb:697:in `cmd' from (irb):20 from c:/troy/data/chef/chef-client11/chef/embedded/bin/irb:12:in `<main>'
用sock.sysread()方法可以看到系统显示了 dir\r\n0x00More?
,然后就卡在那里了。
但是如果我执行
tn = Net::Telnet::new("Host"=>"walnutserver","Port"=>2300,"Prompt"=> /C:.*>/)tn.login("user","pass")tn.cmd("ls")tn.cmd("uname")
则不会出现上述问题。其中ls、uname是在windows中安装的chef只带的linux命令(可能是cygwin)。
网上有人跟我遇到一样的问题,但是也没有找到解决办法 http://www.ruby-forum.com/topic/1516840
有没有哪位遇到相似的问题,并成功解决了?
ruby版本:ruby 1.9.3p286 (2012-10-12) [i386-mingw32]
原文地址:Ruby Net:Telnet 连接windows2008诡异失败, 感谢原作者分享。 成功不是将来才有的,而是从决定去做的那一刻起,持续累积而成。