IO.popen and ssh

I’ve been having some trouble using IO.popen to control an ssh process
(and also mysqldump) on Linux. My understanding is that if I do:
p = IO.popen(‘ssh mymachine’)
then the input and output of the ssh subprocess should be accessible via
p. However, when I try that in an irb shell, the ssh process
immediately takes over the standard input and output of irb, and I get
an “Enter password:” prompt. I have to hit control-c to get back to the
irb prompt.

Is there a workaround for this? Or should I be doing this a different
way? Thanks,
–Paul

Paul L. wrote:

Is there a workaround for this? Or should I be doing this a different
way?

Why not use Net::SSH to connect directly from ruby?
http://net-ssh.rubyforge.org/chapter-2.html#s1

That looks much better-- thanks!

Edwin Van leeuwen wrote:

Why not use Net::SSH to connect directly from ruby?
http://net-ssh.rubyforge.org/chapter-2.html#s1

I’ve had varied experience, but to answer the original question about
password prompt… Why not setup key-based auth between the machines in
question? Doing so has always worked for me.

t

On Sep 11, 2007, at 9:44 AM, Paul L. wrote:

Is there a workaround for this? Or should I be doing this a different
way? Thanks,

ssh requires a pty to read the password. note that this is NOT the
same as STDIN, which is what you get with IO.popen. you need to use
the built-in pty lib to control ssh that way and it’s still fraught
with peril. it’s much, much, much, much better to setup ssh keys for
password-less access (no passwords in scripts), and to spawn a simple
command, such as /bin/sh, on the remote end to read pre-generated
commands (a script).

regards.

a @ http://drawohara.com/

Quoth Edwin Van leeuwen on Tuesday 11 September 2007 08:59:39 am:

Paul L. wrote:

Is there a workaround for this? Or should I be doing this a different
way?

Why not use Net::SSH to connect directly from ruby?
http://net-ssh.rubyforge.org/chapter-2.html#s1

Because at least in my experience, it doesn’t work? :smiley: