0

我正在尝试使用 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
4

1 回答 1

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 }

(请注意,我没有对此进行测试)

于 2012-07-31T01:15:55.503 回答