From: T Y Date: 2011-02-25T17:56:51+09:00 Subject: Re: NET::SSH sudo su problems --bcaec53f9097b083ee049d1782cd Content-Type: text/plain; charset=ISO-8859-1 I think the problem you're having is that sudo requires a PTY otherwise it prompts for a password, which you experience as "hangs". Unfortunately, I couldn't find a simple way to make Net::SSH enable PTY (it's in the ssh protocol), so I had to make my own exec function. As a bonus, it prints the output buffer while running so you can observe this PTY behavior. Good luck! Tal def exec(ssh, command, request_pty=false) exit_code = 0 output_buffer = [] c = ssh.open_channel do |chan| chan.on_request('exit-status') do |ch, data| exit_code += data.read_long print("ssh exec exit-status: #{exit_code}") end chan.on_request('exit-signal') do |ch, data| exit_code += (data.read_long << 8) print("ssh exec exit-signal: #{exit_code}") end chan.on_data do |ch, data| output_buffer << data print("ssh data: #{data}") end chan.on_extended_data do |ch, type, data| output_buffer << data print("ssh extended data (#{type}): #{data}") end chan.request_pty() if request_pty chan.exec(command) end c.wait output = output_buffer.join('') print("ssh \"#{command}\" exit_code=#{exit_code} output=\n#{output}") return exit_code, output_buffer.join('') end On Thu, Feb 24, 2011 at 5:57 PM, Sarith Fernando wrote: > I'm trying to run the following code and having problems > > Net::SSH.start(host, user) do |ssh| > ssh.exec!("sudo su - qos") > > > I run the main which calls this method, but it just hangs and doesnt > actually change the user to "qos" > > -- > Posted via http://www.ruby-forum.com/. > > --bcaec53f9097b083ee049d1782cd--