http://qs321.pair.com?node_id=710369


in reply to Re: A little demo for Net::SSH2
in thread A little demo for Net::SSH2

To use Shell method on Active Perl on windows use:
#!/usr/bin/perl use warnings; use strict; use NET::SSH2; my $host = ""; # use the ip host to connect my $user = ""; # your account my $pass = ""; # your password my ($len, $buf); my $ssh2 = Net::SSH2->new(); #$ssh2->debug(1); if ($ssh2->connect($host)) { if ($ssh2->auth_password($user,$pass)) { #shell use my $chan = $ssh2->channel(); $chan->shell(); $chan->write("ls -a\n"); select(undef,undef,undef,0.2); print $buf while ($len = $chan->read($buf,512)) > 0; $chan->write("who\n"); select(undef,undef,undef,0.2); print $buf while ($len = $chan->read($buf,512)) > 0; #$chan->send_eof(); $chan->close; } else { warn "auth failed.\n"; } } else { warn "Unable to connect Host $@ \n"; }

Replies are listed 'Best First'.
Re^3: A little demo for Net::SSH2
by TGI (Parson) on Aug 21, 2009 at 03:09 UTC

    Thanks for the start, but I found your code would hang on my system. But, all I had to do was make the channel non-blocking and it worked.

    if( $ssh2->connect($host) ) { if( $ssh2->auth_password($user,$pass) ) { #shell use my $chan = $ssh2->channel(); $chan->blocking(0); $chan->shell(); $chan->write("ls -a\n"); select(undef,undef,undef,0.2); print $buf while defined ($len = $chan->read($buf,512)); $chan->write("who\n"); select(undef,undef,undef,0.2); print $buf while defined ($len = $chan->read($buf,512)); $chan->close; } else { warn "auth failed.\n"; } }


    TGI says moo