Ruby telnet зависает при вводе пароля - PullRequest
1 голос
/ 08 июня 2009

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

Проблема, с которой я сталкиваюсь, заключается в том, что, когда я пытаюсь подключиться к компьютеру через telnet (из командной строки), я получаю следующее сообщение:

Welcome to Microsoft Telnet Client

Escape Character is 'CTRL+]'

You are about to send your password information to a remote computer in Internet zone. This might not be safe. Do you want to send anyway(y/n):

Когда я использую логин (net / telnet) класса ruby ​​(), он зависает в приглашении ввода пароля. Это заставляет меня думать, что оно не принимает сообщение во внимание, отправляя имя пользователя к сообщению и пароль к приглашению имени пользователя. Как мне справиться с этой ситуацией?

Редактировать: Процесс входа в систему, кажется, зависает во время запроса пароля. Это просто мое подозрение, что это вызвано приведенным выше сообщением, любые другие идеи приветствуются. Я попытался повторить все, и я получил следующее:

irb(main):030:0> tn = Net::Telnet::new("Host"=>"xxx.xxx.xxx.xxx", "Timeout"=>10) => #<TCPSocket:0x2d8aafc>
irb(main):031:0> tn.login("administrator", "password") {|c| print c}
Welcome to Microsoft Telnet Service

login: administrator
password: Timeout::Error: timed out while waiting for more data
        from C:/Ruby/lib/ruby/1.8/net/telnet.rb:551:in `waitfor'
        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'

Ответы [ 2 ]

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

Я понял это. Не собираюсь удалять это из-за вероятности, что кто-то еще столкнется с проблемой, но мой тайм-аут был установлен слишком низким. Установка его на 25 решила проблему.

2 голосов
/ 08 июня 2009

Прежде всего, попробуйте передать параметр Output_log, чтобы вы могли видеть все, что происходит:

host = Net::Telnet::new(
       "Host"       => "localhost",
       "Port"       => 23,
       "Output_log" => "output_log")

Посмотрите, если это говорит вам о том, что происходит, единственный другой вариант, который я вижу, который может изменить ситуацию, это Binmode => false.

Проверьте документы для получения дополнительной информации: -)

Редактировать 1: Вы также можете проверить опцию Prompt. По-видимому, это то, что решает, когда команда закончила. Если он не соответствует вашему приглашению на вашем сервере, он почти наверняка испортит его.

...