2010-10-14 13 views
0

我使用網絡/ TELNET連接到遠程主機試圖以獲得root權限。運行su命令。這是我正在做它我要如何su命令提供密碼,而使用網/遠程登錄紅寶石

require 'net/telnet' 

localhost = Net::Telnet::new("Host" => "192.147.217.27", 
          "Timeout" => 50, 
          "Prompt" => /[$%#>] \z/n) 
localhost.login("dvsdkrp", "dvsdkvrp") { |c| print c } 
localhost.cmd("cd /home/dvsdkrp/workdir/smruti") { |c| print c } 
localhost.cmd("su") { |c| print c } 
localhost.puts("passwd"){ |c| print c } 

我能夠登錄並能夠做到smruti目錄,但是當我用su命令它帶我到密碼提示,但後來我得到這個錯誤,即使我改變了超時參數爲150

Password: C:/Ruby/lib/ruby/1.8/net/telnet.rb:552:in `waitfor': timed out 
while waiting for more data (Timeout::Error) 
     from C:/Ruby/lib/ruby/1.8/net/telnet.rb:679:in `cmd' 
     from tel.rb:7 

我該怎麼辦?

+1

你是否確實想要發送未加密的root密碼?爲什麼你不使用SSH呢? – pafcu 2010-10-14 10:49:27

+0

pafcu這是不是我的問題意味着我沒有問題發送root密碼unenrypted – 2010-10-14 11:02:06

+0

我試圖SSH還,但我得到一些authenication失敗的錯誤 – 2010-10-14 11:02:48

回答

1

當您創建的Telnet對象是一個它去尋找它運行其下一個命令之前指定的提示。如果你超時,那麼我認爲它是因爲它沒有看到它期望的提示。如果您在發送'su'命令時使用了匹配選項,則可以專門爲此命令指定提示。

su_prompt = "Password: " 
localhost.cmd("String" => "su", "Match" => /#{su_prompt}/) { |c| print c } 
localhost.cmd("passwd") 

此新提示僅用於當前命令。最初指定的提示仍然對會話的其餘部分有影響。

+0

但在執行'匹配'行後,我在哪條線路上提供密碼 – 2010-10-14 13:47:29

+0

的D,在看到臨時提示後,遠程登錄會話將等待輸入。此時您可以將密碼發送給您。 (代碼示例中第3行) – 2010-10-14 13:50:44

+0

未定義的局部變量或方法'蘇」主:對象(NameError) – 2010-10-14 13:53:18