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 に答える