Сценарии Ruby - Telnet зависает при входе в систему - PullRequest
2 голосов
/ 09 июня 2009

Я пытаюсь выполнить некоторые базовые сценарии, используя ruby, для входа в Windows-машину через telnet и извлечения некоторых файлов с помощью командной строки dos ftp. Когда я делаю это вручную, все идет гладко, но когда я пробую это через ruby, я получаю сообщение об ошибке при входе в систему.

Вот моя тестовая программа в полном объеме:

require 'net/telnet'
tn = Net::Telnet::new("Host"=>"xxx.xxx.xxx.xxx", "Timeout"=>25, "Output_log"=>"output_log.log", "Dump_log"=> "dump_log.log", "Prompt"=>"C:.*>")
tn.login("administrator", "xxxxxxx") {}
tn.cmd('dir')
exit

Содержимое output_log ничего не выдаёт как неправильное:

Trying 208.10.202.187...
Connected to 208.10.202.187.
Welcome to Microsoft Telnet Service 
login: administrator
password: 
*===============================================================
Welcome to Microsoft Telnet Server.
*===============================================================
C:\Documents and Settings\Administrator>

То же самое для dump_log, который имеет очень похожее, но неловко отформатированное содержимое. Когда я запускаю программу, она некоторое время бездействует, а затем выдает следующую ошибку:

PS C:\code\tools\deployment> ruby test.rb
C:/Ruby/lib/ruby/1.8/net/telnet.rb:551:in `waitfor': timed out while waiting for more data (Timeout::Error)
        from C:/Ruby/lib/ruby/1.8/net/telnet.rb:685:in `cmd'
        from C:/Ruby/lib/ruby/1.8/net/telnet.rb:730:in `login'
        from test.rb:3

Что заставляет меня подозревать, что класс telnet не распознает командную строку. Я пробовал несколько разных строк регулярных выражений для параметра Prompt, включая значение по умолчанию, и, похоже, ничего не помогло.

1 Ответ

3 голосов
/ 09 июня 2009

Я думаю, что поле приглашения должно быть регулярным выражением, а не строкой Попробуйте

tn = Net::Telnet::new("Host"=>"xxx.xxx.xxx.xxx", "Timeout"=>25,
"Output_log"=>"output_log.log", "Dump_log"=> "dump_log.log",
"Prompt"=> /C:.*>/)
...