The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#!/usr/bin/perl

use strict;
use warnings;
use Data::Dumper;

my %connection_details = ( host => 'localhost', @ARGV);
my $ssh = ssh_connection(%connection_details);
print "ssh: ", Dumper($ssh), "\n";
exit (0);

BEGIN {
    eval {
        require Net::SSH2;
        warn "Net::SSH2 loaded";
        1;
    } or eval {
        require Net::OpenSSH::Compat::SSH2;
        Net::OpenSSH::Compat::SSH2->import(':supplant');
        warn "Net::SSH2 supplanted";
        1;
    } or die "unable to load any SSH module: $@";
    Net::SSH2->import();
}


sub ssh_connection {
    my (%connection_info) = @_;

    ## Connect to the ssh server
    my $ssh = Net::SSH2->new();

    $ssh->connect($connection_info{'host'},22)
        or die "Unable to connect to the remote ssh server \n\n $@";

    ## Login to ssh server
    $ssh->auth_password($connection_info{'user'},$connection_info{'pass'})
        or die "Unable to login Check username and password. \n\n $@\n";

    return $ssh;
}