Beefy Boxes and Bandwidth Generously Provided by pair Networks
No such thing as a small change

using Net::OpenSSH in a MCE worker thread

by Andy16 (Acolyte)
on Jun 28, 2013 at 09:04 UTC ( #1041192=perlquestion: print w/replies, xml ) Need Help??
Andy16 has asked for the wisdom of the Perl Monks concerning the following question:

Hi, I'd like to use a OpenSSH connection in a MCE worker thread.

Doing so - the worker thread just exists after the "new".

First debugging:
not giving user/pwd it stops showing the password prompt.
giving user and pwd to the new - it crashes.

Is there any hassle with signals?
Any way out of that or how to do more debugging?

thanks for help, monks! :->

$self->sendto('stdout', "child($wid): doing ssh\n"); $ssh = Net::OpenSSH->new( $device, user => $sshuser, passwd => $sshpwd, master_opts => [-o => "StrictHostKeyChecking=no"], master_stderr_discard => 1 ); $self->sendto('stdout', "child($wid): did ssh - not shown!!! \n"); +

and after some more digging: if I
use IO::Pty;
in the main prog already - everything is fine!
So there is not a signal but a coding issue in loading that lib during runtime..

Replies are listed 'Best First'.
Re: using Net::OpenSSH in a MCE worker thread
by salva (Abbot) on Jun 28, 2013 at 10:01 UTC
    Activate the module debugging mode...
    $Net::OpenSSH::debug = -1;
    and post here what you get.
      Hi all,

      MCE has gone through several revisions since the time the OP tested this. I tested without IO::Pty on my box. Amazingly, running (yum install perl-Net-OpenSSH) installed the package without checking the perl-IO-Tty dependency.

      Workers in older MCE revisions closed STDOUT/STDERR prior to exiting. That was fix some time back.

      $ ./ child(1): doing ssh unable to load Perl module IO::Pty: Can't locate IO/ in @INC (@I +NC contains: /media/psf/shm/trunk/examples/../lib /usr/local/lib64/pe +rl5 /usr/local/share/perl5 /usr/lib64/perl5/vendor_perl /usr/share/pe +rl5/vendor_perl /usr/lib64/perl5 /usr/share/perl5 .) at (eval 10) lin +e 1, <__ANONIO__> line 2. at /usr/share/perl5/vendor_perl/Net/ line 756.

      Btw, the script works after installing IO::Tty (yum install perl-IO-Pty).

      my $sshuser = 'remote_userid'; my $sshpwd = 'remote_passwd'; my $device = 'remote_device'; use MCE::Flow max_workers => 1; use Net::OpenSSH; mce_flow sub { my $wid = MCE->wid; MCE->sendto('stdout', "child($wid): doing ssh\n"); my $ssh = Net::OpenSSH->new( $device, user => $sshuser, passwd => $sshpwd, master_opts => [-o => "StrictHostKeyChecking=no"], master_stderr_discard => 1 ); MCE->sendto('stdout', "child($wid): did ssh - not shown!!! \n"); };

      In summary, STDERR output is no longer lost with current MCE releases.

      Hi - sorry, but
      => debug did not do any lines
      => no furhter message than "just gone" ....

      meanwhile (see above) I'm sure it is realted to an eval loading a missing pm...


        taken from

        sub _load_module { my ($module, $version) = @_; $loaded_module{$module} ||= do { do { local ($@, $SIG{__DIE__}); eval "require $module; 1" } or croak "unable to load Perl module $module"; 1 }; if (defined $version) { local ($@, $SIG{__DIE__}); my $mv = eval "\$${module}::VERSION" || 0; (my $mv1 = $mv) =~ s/_\d*$//; croak "$module version $version required, $mv is available" if $mv1 < $version; } 1 }

        somewhere in here it breaks... if pm not preloaded and in MCE context.

Re: using Net::OpenSSH in a MCE worker thread
by kcott (Chancellor) on Jun 28, 2013 at 09:20 UTC

Log In?

What's my password?
Create A New User
Node Status?
node history
Node Type: perlquestion [id://1041192]
Approved by hdb
and all is quiet...

How do I use this? | Other CB clients
Other Users?
Others cooling their heels in the Monastery: (5)
As of 2018-06-24 15:22 GMT
Find Nodes?
    Voting Booth?
    Should cpanminus be part of the standard Perl release?

    Results (126 votes). Check out past polls.