Domanda

Sto cercando di fare un po 'di scripting di base utilizzando rubino per accedere a una macchina Windows via telnet e tirare alcuni file sopra utilizzando la riga di comando ftp dos. Quando faccio questo tutto manualmente va liscio, ma quando provo tramite rubino sto ricevendo un errore nella chiamata di login.

Ecco il mio programma di test nella sua interezza:

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

Il contenuto di output_log non tradiscono nulla come essere in errore:

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>

Lo stesso per il dump_log che ha contenuti molto simili, ma goffamente formattati. Quando eseguo il programma si siede intorno per un po 'e poi emette il seguente errore:

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

Il che mi porta a sospettare che la classe telnet non riconosce il prompt dei comandi. Ho provato diverse stringhe regex diversi per il parametro Prompt, tra cui il default e nulla sembra aiutare.

È stato utile?

Soluzione

Credo che il campo pronta bisogno di essere una regexp, non è una stringa Prova

tn = Net::Telnet::new("Host"=>"xxx.xxx.xxx.xxx", "Timeout"=>25,
"Output_log"=>"output_log.log", "Dump_log"=> "dump_log.log",
"Prompt"=> /C:.*>/)
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top