in reply to Re: Net::SSH2 Interactive command example
in thread Net::SSH2 Interactive command example

Thanks for the quick response Shmem. I should have stated that I had gone through Net::SSH2::Channel and cannot seem to find any argument that allows for the channel to stay open. It seems to me that this is a simple enough request and therefore it should exist somewhere within the module. Has anyone found a way to do this?
  • Comment on Re^2: Net::SSH2 Interactive command example

Replies are listed 'Best First'.
Re^3: Net::SSH2 Interactive command example
by shmem (Chancellor) on Jun 18, 2007 at 13:06 UTC
    It's the shell method of Net::SSH::Channel, as zentara points out below, but alas, his code doesn't seem to work for me.

    Seems that this module is somwhat quirky, I could get it work only with some delay between sending a command and reading its output, and then the diamond operator doesn't seem to work on the $chan2 filehandle, but the read method does (linux, perl5.8.8):

    #!/usr/bin/perl use Net::SSH2; my $ssh2 = Net::SSH2->new(); $ssh2->connect('somehost') or die; if ($ssh2->auth_password('user','password')) { #shell use my $chan2 = $ssh2->channel(); $chan2->shell(); print $chan2 "uname -a\n"; select(undef,undef,undef,0.2); my ($len, $buf); print $buf while ($len = $chan2->read($buf,512)) > 0; print $chan2 "who\n"; select(undef,undef,undef,0.2); print $buf while ($len = $chan2->read($buf,512)) > 0; $chan2->close; } else { warn "auth failed.\n"; }

    Those selects() could be replaced with calls to $chan2->poll(), which usage to find out is left as an excercise to the reader...

    --shmem

    _($_=" "x(1<<5)."?\n".q·/)Oo.  G°\        /
                                  /\_¯/(q    /
    ----------------------------  \__(m.====·.(_("always off the crowd"))."·
    ");sub _{s./.($e="'Itrs `mnsgdq Gdbj O`qkdq")=~y/"-y/#-z/;$e.e && print}