http://www.perlmonks.org?node_id=1050277


in reply to Handling STDERR when using Net::OpenSSH

The Capture::Tiny module can be used to capture STDERR. For example,
#!/usr/bin/env perl use strict; use warnings; use Net::OpenSSH; use Capture::Tiny ':all'; my $host = 'broken'; my $ssh; my ($stdout, $stderr, @result) = capture { $ssh = Net::OpenSSH->new($host); }; print "Captured STDERR: $stderr\n"; $ssh->error and die "Couldn't establish SSH connection: ". $ssh->error +; exit;
gives the output:
Captured STDERR: ssh: Could not resolve hostname broken: nodename nor +servname provided, or not known Couldn't establish SSH connection: unable to establish master SSH conn +ection: master process exited unexpectedly at ns.pl line 15.

Replies are listed 'Best First'.
Re^2: Handling STDERR when using Net::OpenSSH
by mds (Novice) on Aug 21, 2013 at 13:39 UTC
    Thank you kevbot and jandrew. I could not get $SIG{__WARN__} to provide any satisfaction in captureing STDERR. Capture::Tiny worked very well. Just to be sure and to keep it from being confused with the openssh capture function I used Capture::Tiny::capture
    my $ssh; my $LOGIN_TIMEOUT = 60; my ( $ssh_stdout, $ssh_stderr, @ssh_result ) = Capture::Tiny::capture { $ssh = Net::OpenSSH->new( $ip_address, batch_mode => 1, timeout => $LOGIN_TIMEOUT, kill_ssh_on_timeout => 1, master_opts => [ -o => "StrictHostKeyChecking=no", -o => "ConnectTimeout=60", -o => "ForwardX11=no" ], ); };
    Thank you very much.