我正在尝试使用Net :: Telnet登录某些设备。对于登录提示,设备一次需要一个字符用于登录和密码提示。 Ruby立即发送整个用户名。有没有办法将它设置为一次发送一个字符?
这是我的剧本:
require 'net/telnet'
options = Hash.new
ipaddr = '10.160.64.103'
date = Time.new.strftime('-%H.%M.%S')
basedir = '.'
files = Dir.glob("#{ipaddr}*.log")
if files.size >= 0
File.delete(files[0])
end
file = File.new("#{ipaddr}-telnet#{date}.log", "w")
tn = Net::Telnet::new("Host" => ipaddr,
"Output_log" => "#{ipaddr}-telnet#{date}.log",
"Dump_log" => "dump.log",
"Prompt" => /->\z/ )
options["Name"] ||= "anonymous"
options["Password"] ||= "********"
tn.login(options) { |c| print c }
tn.close
答案 0 :(得分:0)
我不相信有一种方法可以像登录方法那样简单,但是按照login
的来源,我们可以做类似的事情:
prompt = /->\z/
login_prompt = /[Ll]ogin[: ]*\z/
password_prompt = /[Pp]ass(?:word|phrase)[: ]*\z/
# wait until we've seen a login prompt
tn.waitfor(login_prompt){|c| print c }
# print each user character, newline; wait for password prompt
(user+"\n").each_char{|c| tn.print(c) }
tn.waitfor(password_prompt){|c| print c }
# print each pass character, newline; wait for normal prompt
(pass+"\n").each_char{|c| tn.print(c) }
tn.waitfor(prompt){|c| print c }
(请注意,我没有对此进行测试)