http://qs1969.pair.com?node_id=870358

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

I'm trying to write a fairly simple script that will ssh to a remote host, run a command and capture the output. Now the basics are fairly easy but what I need a little help with is the connection phase.

The plan for connection is

    1) Use ssh keys in memory (ssh-agent)
    2) Use my account with known password
    3) Use known local account with known password.
    4) Use root with my keys
    5) Use root with known password from a list
    6) Give up and report error.
The idea is that it will use the first connection it can make.

Now I can trap the $ssh->login with eval{} and that's fine.

Question : how do I chain eval's or whatever mechanism to accomplish this without the program falling over.

use Net::SSH::Perl; while (my $server = <read from file>) { chomp $server; print $server; my $ssh = SSHConnect($server); ... } sub SSHConnect { my $server = shift; my $ssh = Net::SSH::Perl->new($server,protocol=>'2,1'); eval { $ssh->login(); }; if ($@) { warn "Some error message about $server"; }; return $ssh; }