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:in `cmd'
        from tel.rb:7

What should i do??

···

--
Posted via http://www.ruby-forum.com/.

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

···

On Oct 14, 2010, at 03:22 , Amit Tomar 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

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

···

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

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:in `cmd'
        from tel.rb:7

What should i do??

Ryan Davis wrote in post #950107:

···

On Oct 14, 2010, at 03:22 , Amit Tomar 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

--
Posted via http://www.ruby-forum.com/\.

Jeremy Bopp wrote in post #950260:

   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

···

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

--
Posted via http://www.ruby-forum.com/\.

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 Thu, Oct 14, 2010 at 5:46 AM, Amit Tomar <amittomer25@yahoo.com> wrote:

Ryan Davis wrote in post #950107:
> On Oct 14, 2010, at 03:22 , Amit Tomar 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

--
Posted via http://www.ruby-forum.com/\.

--
Daniel Navarro
9035612340

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

···

On 10/15/2010 1:10 AM, Amit Tomar wrote:

Jeremy Bopp wrote in post #950260:

On 10/14/2010 5:22 AM, Amit Tomar 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