in reply to Re: SSH connection error
in thread SSH connection error

#!/usr/local/bin/perl
use strict;
use Net::SSH::Perl;
my %params;
$params{'protocol'} = '2';
$params{'port'} = '22';
$params{'debug'} = 'true';

my $ssh = Net::SSH::Perl->new("##", %params) or die "\n\nThere was an error : $!\n\n";
$ssh->login("##", "##");
my (my $stdout, my $stderr, my $exit2) = $ssh->cmd('ls -l');
if ($stdout){print "Output:\n$_\n\n";}
if ($stderr){print "Error:\n$_\n\n";}
print "Exit Code:\n$exit2\n\n";
The error is from the login line.

Replies are listed 'Best First'.
Re^3: SSH connection error
by u235sentinel (Hermit) on Feb 23, 2006 at 01:14 UTC
    I didn't see anything that seemed to be a show stopper however I thought this line looked a little odd
    $params{'debug'} = 'true';
    Usually I see this when creating a connection and debugging the session
    my $ssh = Net::SSH::Perl->new($srvr, protocol => 2, debug => 1);

    Maybe I'm just being picky. Perhaps you can try spelling it out like this and see if it helps. Are you receiving any debug information? If so could you please provide it. Also you could simplify this
    my (my $stdout, my $stderr, my $exit2) = $ssh->cmd('ls -l');
    with this
    my ($stdout, $stderr, $exit2) = $ssh->cmd('ls -l');
    Just some thoughts that might help. And don't forget the debug info.

      FWIW, $params{'debug') = 'true' spits out a lot of debug information as the script is running, which coincidentally takes a long time. I got a bunch of this, (trimmed for brevity, anyone who's watched the output of ssh -v hostname will appreciate that)

      $ perl netssh.pl localhost: Reading configuration data /Users/username/.ssh/config localhost: Reading configuration data /etc/ssh_config localhost: Connecting to www.c2group.net, port 22. localhost: Remote protocol version 1.99, remote software version OpenS +SH_<some_version> FreeBSD localhost: Net::SSH::Perl Version 1.29, protocol version 2.0. localhost: No compat match: OpenSSH_<some_version> FreeBSD. localhost: Connection established. localhost: Sent key-exchange init (KEXINIT), wait response. localhost: Algorithms, c->s: 3des-cbc hmac-sha1 none localhost: Algorithms, s->c: 3des-cbc hmac-sha1 none localhost: Entering Diffie-Hellman Group 1 key exchange. localhost: Sent DH public key, waiting for reply. localhost: Received host key, type 'ssh-dss'.

      ... and finally:

      Output: Exit Code: 0

      I've already changed the my( my $stdout, my $stderr, my $exit2 ) line to remove the superflous "my"s... and now I notice the following:

      if ($stdout){print "Output:\n$_\n\n";}

      $_ doesn't contain anything at that point, so this would work better:

      if ($stdout){print "Output:\n$stdout\n\n";}

      As far as your original problem, do you have any special characters in your password that might be gumming up the works? (%, @, $ would all need to be escaped out of your password, especially if you have it in double quotes as your example code above)



      --chargrill
      $/ = q#(\w)# ; sub sig { print scalar reverse join ' ', @_ } + sig map { s$\$/\$/$\$2\$1$g && $_ } split( ' ', ",erckha rlPe erthnoa stJu +" );
Re^3: SSH connection error
by leocharre (Priest) on Feb 22, 2006 at 20:43 UTC

    i don't see
    #!/usr/local/bin/perl -w
    I know.. sounds retarded in something so simple.. but then..

    this obviously means your object has not been made, made properly etc. so something is up with your %params, or the Net::SSH::Perl module, some dependency or something.. check the error log ofr the machine too! maybe the module is having an error or something else too.

    I would suggest first eliminate every simple explanation, and i think even 'hello world' should -w