coldmiser has asked for the wisdom of the Perl Monks concerning the following question:

I'm trying to put together a script that will allow me to connect to a unix system and run a few commands. I am able to use 'exec' without any problems, but when I try to use 'shell' I am prompted to 'Enter user name'. I've searched the site and google and it appears that I'm using 'shell' correctly so I'm not really sure what I'm doing wrong here

here is a copy of the code:

my $host = "host"; my $user = "name"; my $pass = "password"; my $cmd = "pwd"; my $cmd2 = "who"; my $ssh2 = Net::SSH2->new(); $ssh2->connect($host) or die "Unable to connect $@ $! \n"; $ssh2->auth_password($user, $pass) or die "Unable to login $@ $! \n"; my $chan = $ssh2->channel(); $chan->exec($cmd); while (<$chan>) { chomp; print "ONE: [$_]\n"; } $chan->close; my $chan2 = $ssh2->channel(); $chan2->exec("who"); while (<$chan2>) { chomp; print "TWO: [$_]\n"; } $chan2->close; my $chan3 = $ssh2->channel(); $chan3->shell(); print $chan3 "pwd\n"; print "THREE-a: [$_]\n" while <$chan3>; print $chan3 "who\n"; print "THREE-b: [$_]\n" while <$chan3>; $chan3->close;

and my output

ONE: [/usr/local] TWO: [user pts/40 Jun 26 07:04 (192.168.1.247)] TWO: [user pts/41 Jun 26 07:05 (192.168.1.247)] TWO: [user pts/42 Jun 26 07:25 (192.168.1.194)] TWO: [user pts/43 Jun 26 07:57 (192.168.1.194)] THREE-a: [Enter user name: Enter user name: ] THREE-b: [Enter user name: ]

Replies are listed 'Best First'.
Re: Net::SSH2 shell in Windows
by zentara (Cardinal) on Jun 26, 2012 at 17:56 UTC
    Hi, it almost sounds like your password session has expired. Just as some educated guesses, try these code additions and see what you get. Also see Net::SSH2 just hangs up without any output
    my $ssh2 = Net::SSH2->new(); $ssh2->debug(1); ...... ..... $chan2->close; my $chan3 = $ssh2->channel(); if( $ssh2->auth_ok ){ print "auth ok"} else{ print "auth lost\n" } $chan3->blocking(0); # try to set blocking 0 $chan3->shell();

    I'm not really a human, but I play one on earth.
    Old Perl Programmer Haiku ................... flash japh

      It shows "auth ok" so that appears correct and adding blocking didn't show much.

      The debug log ends up pretty long, but the only real differences I can see from $chan1/$chan2 and $chan3 is the 'revents' entry states 129 for $chan1/$chan2 and it shows 1 for $chan3.

      Not sure how this helps me though, I'm having a tough time trying to digest the debug log.

Re: Net::SSH2 shell in Windows
by syphilis (Archbishop) on Jun 27, 2012 at 01:00 UTC
    Not that it probably helps all that much, but you're script works fine for me on MS Windows, connecting to an ssh server on a local linux box.
    I get:
    ONE: [/home/rob] TWO: [rob pts/0 Jun 27 11:37 ] TWO: [rob pts/1 Jun 27 11:37 ] TWO: [rob pts/2 Jun 27 11:37 ] TWO: [rob pts/3 Jun 27 11:37 ] THREE-a: [/home/rob ] THREE-b: [rob pts/0 Jun 27 11:37 ] THREE-b: [rob pts/1 Jun 27 11:37 ] THREE-b: [rob pts/2 Jun 27 11:37 ] THREE-b: [rob pts/3 Jun 27 11:37 ]
    I think the inserted newline in the "THREE" outputs arises because those replies (unlike the earlier ones) have not been chomp()ed.

    Cheers,
    Rob
      Actually that does help, I don't have another unix box to test this against so it sounds like the script works correctly, but for some reason the unix box is doing something strange.