How do i provide password for su command while using net/telnet in ruby

Hii all ,
Am using Net/TELNET to connect to remote host trying to run su
command in order to get root privilage this is how i doing

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 }

But am getting this error

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:incmd’
from tel.rb:7

What should i do??

On Oct 14, 2010, at 03:22 , Amit T. wrote:

     Am using Net/TELNET to connect to remote host trying to run su

command in order to get root privilage this is how i doing

Please tell me/us that this isn’t across an unsecured network.
Otherwise, you should switch from telnet to ssh.

Well if you are timing out maybe try to thread it.

$ ruby <<EOF

thread = Thread.new { sleep 5; echo \"Done.\" }
puts “Waiting on telnet to catch it’s slow ass up.”
puts thread.value
EOF
Waiting on the thread…
Done.

On 10/14/2010 5:22 AM, Amit T. wrote:

localhost.cmd(“cd /home/dvsdkrp/workdir/smruti”) { |c| print c }
What should i do??
I want to think that the problem here is that the su program expects to
have a terminal so that it can disable echoing what you type for your
password and then directly read that password. Driving a telnet session
like this does not emulate a terminal and could cause problems for su.
I would expect su to error out rather than cause a timeout though.

Are you able to configure sudo on that host? If so you can configure it
to allow your account to run the desired command(s) without a password
and then invoke sudo instead of su.

-Jeremy

Ryan D. wrote in post #950107:

On Oct 14, 2010, at 03:22 , Amit T. wrote:

     Am using Net/TELNET to connect to remote host trying to run su

command in order to get root privilage this is how i doing

Please tell me/us that this isn’t across an unsecured network.
Otherwise, you should switch from telnet to ssh.

Network security is not an issue for me and i just want to make su
command to work

On 10/15/2010 1:10 AM, Amit T. wrote:

Are you able to configure sudo on that host? If so you can configure it
}
localhost.cmd(“passwd”)
Now its working fine

Actually, your solution of looking for su’s prompt and then sending the
password as a “command” proves that my assertion was mostly incorrect,
but I’m glad you found what you were looking for.

-Jeremy

Jeremy B. wrote in post #950260:

On 10/14/2010 5:22 AM, Amit T. wrote:

localhost.cmd(“cd /home/dvsdkrp/workdir/smruti”) { |c| print c }
What should i do??
I want to think that the problem here is that the su program expects to
have a terminal so that it can disable echoing what you type for your
password and then directly read that password. Driving a telnet session
like this does not emulate a terminal and could cause problems for su.
I would expect su to error out rather than cause a timeout though.

Are you able to configure sudo on that host? If so you can configure it
to allow your account to run the desired command(s) without a password
and then invoke sudo instead of su.

-Jeremy

Hi Jeremy
You are right this is how i solved it

su_prompt = "Password: "
localhost.cmd(“String” => “su”, “Match” => /#{su_prompt}/) { |c| print
}
localhost.cmd(“passwd”)
Now its working fine