in reply to Uninitalized error for Stdout and Stderr from Net::SSH::Perl

Not seeing a reply, I'll dive in here. Perhaps you didn't check $stderr and $exit? $stdout may be undefined if there is an error, but your code doesn't check any of those conditions.

Have you tried this from the command line? Perhaps df needs the full pathname?

I can't make any progress on your debug output.

-QM
--
Quantum Mechanics: The dreams stuff is made of

Replies are listed 'Best First'.
Re^2: Uninitalized error for Stdout and Stderr from Net::SSH::Perl
by waytoperl (Beadle) on May 11, 2015 at 16:03 UTC

    Updated code to check $stderr and $exit. $stdout and $stderr have undefined. Do I need to initialize $STDOUT to $stdout

    Output from the updated code

    #!/usr/bin/env perl -w use strict; use warnings; use Data::Dumper; use Net::SSH::Perl; ###################################################################### +# # LOGIN DETAILS ###################################################################### +# my $server = "10.255.255.10"; my $username = "username"; my $password = "password"; # Log into server print "Creating ssh object... "; my $ssh = Net::SSH::Perl->new($server); # Error check this print "done\n"; print "Logging into server... "; $ssh->login($username, $password); # Error check this print "done\n"; # Check df my $command = 'df'; print "Running command ($command)... "; my ($stdout, $stderr, $exit) = $ssh->cmd($command); # Check output print "done\n"; print "$stdout\n"; print "$stderr\n"; print "$exit\n"; $ssh->cmd("exit");
    [root@server-01 New_script]#perl New_script.pl Creating ssh object... done Logging into server... done Running command (df)... done Use of uninitialized value $stdout in concatenation (.) or string at w +lgw2.pl line 29. Use of uninitialized value $stderr in concatenation (.) or string at w +lgw2.pl line 30. 0
      As the login seems to be successful, it appears that the command is not returning any output, and is exiting "normally".

      My own foray into this kind of script just calls ssh through a backtick or qx//, like so:

      my @result = qx/$ssh ${user}\@${host} '$cmd'/;

      which isn't as easy to separate the various results. I also have pre-shared key login, so there's no password prompt. And that doesn't help you.

      I'll see if I can attract more attention to this.

      -QM
      --
      Quantum Mechanics: The dreams stuff is made of