Beefy Boxes and Bandwidth Generously Provided by pair Networks
Welcome to the Monastery
 
PerlMonks  

Re: A little demo for Net::SSH2

by Anonymous Monk
on May 22, 2007 at 12:24 UTC ( [id://616746]=note: print w/replies, xml ) Need Help??


in reply to A little demo for Net::SSH2

Hi, have you tested in windows?. scp_put,shell is not working in windows.

Replies are listed 'Best First'.
Re^2: A little demo for Net::SSH2
by zentara (Archbishop) on May 22, 2007 at 15:38 UTC
    I don't have MSWindows on any of my machines.

    I'm not really a human, but I play one on earth. Cogito ergo sum a bum
Re^2: A little demo for Net::SSH2
by radici (Initiate) on Sep 10, 2008 at 14:23 UTC
    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"; }

      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

To use Shell method on Active Perl
by radici (Initiate) on Sep 10, 2008 at 14:29 UTC
    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";
    }
      is it possible to poll the shell for timeouts just like this example:
      $chan->exec("ls -l"); my $poll = { handle => $chan, events => -1 }; while ($ssh2->poll(500, [ $poll ])) { if ($poll->{revents}{out}) { while (<$chan>) { $r=$r.$_; } } if ($poll->{revents}{channel_closed} || $poll->{revent +s}{listener_closed}) { my $exit = $chan->exit_status(); print $r; } } print "timeout\n";
      This works fine for $chan->exec(..), but i need shell to execute more than one command, can someone help me with some code to poll the shell writes and reads for timeouts???

Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: note [id://616746]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this?Last hourOther CB clients
Other Users?
Others examining the Monastery: (8)
As of 2024-03-29 14:14 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found