arc444 has asked for the wisdom of the Perl Monks concerning the following question:

Hi. Can anyone advise how I can get my Net::SSH::Perl object to use a particular key I have identified in my Net::SSH::Perl::Agent object ?

I have deliberatley simplified down - I will actually iterate over all available keys until I find the one I want ( based on 'comment' ) and then wish to use that particular key

Im unable to try all keys as my target host only allows a few attempts, and I have many keys loaded into the agent ( reducing these available keys is not an option )

Many Thanks !

# Ensure the invoking process has a valid ssh-agent running, and is lo +aded with an appropriate key, or keys use warnings; use strict; use Net::SSH::Perl::Key; use Net::SSH::Perl::Agent; my $agent = Net::SSH::Perl::Agent->new(2); my ($key, $comment) = $agent->first_identity; use Net::SSH::Perl; my $ssh_user = 'myuser'; my $ssh_host = 'myhost'; ## How to use the above referenced $key in the following ssh connectio +n ?? ## my %ssh_params = ( debug => '1', options => [ "StrictHostKeyChecking n +o", "UserKnownHostsFile /dev/null" ] ); my $ssh = Net::SSH::Perl->new( $ssh_host, %ssh_params ); my $result = $ssh->login("$ssh_user"); if ( $result ) { print "Logged in as ${ssh_user} on host ${ssh_host}\n"; } else { print "Failed to login in as ${ssh_user} on host ${ssh_host}\n"; }

Replies are listed 'Best First'.
Re: Net::SSH::Perl and Net::SSH::Perl::Agent
by thanos1983 (Parson) on Dec 14, 2018 at 11:59 UTC

    Hello arc444,

    It looks that you have already an answer to your question. You never let us know if the proposed solution is working. If it did worked for you leave a comment for future reference. Someone else might benefit as well. :)

    Further on, why you are using Net::SSH::Perl? Is there a specific reason? I would recommend to use Net::OpenSSH. Why? Simply read bellow:

    From Net::OpenSSH-Vs.-Net::SSH::.*-modules:

    Net::SSH::Perl is not well maintained nowadays (update: a new maintain +er has stepped in so this situation could change!!!), requires a bunc +h of modules (some of them very difficult to install) to be acceptabl +y efficient and has an API that is limited in some ways.

    Regarding to your question you can use from the proposed module key_path => $private_key_path. Sample of code:

    #!/usr/bin/perl use strict; use warnings; use Data::Dumper; use Net::OpenSSH; # $Net::OpenSSH::debug = -1; my $host = 'localhost'; my %opts = ( user => "user", port => "22", # default # psw => "psw", key_path => "/home/user/.ssh/id_rsa" ); my $ssh = Net::OpenSSH->new($host, %opts); $ssh->error and die "Can't ssh to $host: " . $ssh->error; my @ls = $ssh->capture("ls"); $ssh->error and die "remote ls command failed: " . $ssh->error; chomp (@ls); print Dumper \@ls; __END__ $ perl test.pl $VAR1 = [ 'Desktop', 'Documents', . . . ];

    If I understood your question correctly this should work for you. If not let me know so I can update my answer. I have being using the module Net::OpenSSH for a few years so far I never found a case that was failing for me. It has way way too many features that other modules do not have.

    Hope this helps, BR

    Seeking for Perl wisdom...on the process of learning...not there...yet!
Re: Net::SSH::Perl and Net::SSH::Perl::Agent
by 1nickt (Canon) on Dec 13, 2018 at 19:50 UTC

    Hi, the doc seems to indicate that if you want pubkey auth you must pass the identity_files option in the params hash. The agent wrapper is returning the key whereas the login method expects filenams to have been passed to the constructor. (Disclaimer: if I am reading the doc correctly!)

    Hope this helps!


    The way forward always starts with a minimal test.