问题 我用 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]