1

我对 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):

当我使用 ruby​​ 的 telnet 类 (net/telnet) login() 时,它会挂在密码提示符上。这让我认为它没有考虑到消息,将用户名发送到消息并将密码发送到用户名提示。我该如何处理这种情况?

编辑:登录过程似乎在密码提示期间挂起。我只是怀疑这是由上述消息引起的,任何其他想法都值得赞赏。我试图回应一切,我得到以下信息:

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'
4

2 回答 2

4

我想到了。如果其他人遇到问题但我的超时设置太低,则不会删除它。将其设置为 25 解决了这个问题。

于 2009-06-08T14:02:14.570 回答
2

首先,尝试传递Output_log参数,以便您可以看到正在发生的一切:

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

看看这是否能告诉你发生了什么,我看到的唯一可能有所作为的其他选项是Binmode => false.

检查文档以获取更多信息:-)

编辑 1:您也可以检查该Prompt选项。显然,它决定了命令何时完成。如果它与您服务器上的提示不匹配,它几乎肯定会搞砸。

于 2009-06-08T13:56:27.313 回答