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";
}
}