【发布时间】:2013-04-30 21:43:33
【问题描述】:
我尝试使用 ruby Net::Telnet 连接 windows 2008 并执行一些命令。但是失败了。
如果执行
tn = Net::Telnet::new("Host"=>"walnutserver","Port"=>2300,"Prompt"=> /C:.*>/)
tn.login("user","pass")
tn.cmd("dir")
tn.cmd("dir")
第一个tn.cmd("dir") 是成功,但第二个抛出异常。然后后续命令都失败了。经过实验,我发现任何windows命令都会导致这种情况。
例外:
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?
Buf 如果执行
tn = Net::Telnet::new("Host"=>"walnutserver","Port"=>2300,"Prompt"=> /C:.*>/)
tn.login("user","pass")
tn.cmd("ls")
tn.cmd("uname")
它没有正常运行。 ls、uname是一些安装在目标机器上的厨师带来的linux命令。
ruby 版本:ruby 1.9.3p286 (2012-10-12) [i386-mingw32]
我找到了其他人 在 Stackoverflow 上问同样的问题,但他没有得到解决方案。 http://www.ruby-forum.com/topic/1516840
需要你的帮助。
【问题讨论】: