http://qs321.pair.com?node_id=531225


in reply to Connection test : Net::SSH::Perl : $ssh->login - detecting failure

I bumped into this issue a while back. While I'm not sure this is the "best" way, I too ended up relying on cmd() failure to figure out whether I was truly logged in or not. In my case the remote machines were all unix/linux based, so I'd issue a simple "uname -n" and see if I got back the same hostname as I was expecting. If the call to cmd() failed, I'd propagate the failure. If the call to cmd() succeeded but the hostname didn't match...well that was a whole other sort of error (which in my case never happens in practice...but it can't hurt to check).

One thing I noticed with the various calls to Net::SSH::Perl is that there were two ways to fail...ungracefully, which would die/croak...and gracefully, which would return actual error codes and messages. So consider encapsulating the various calls to "things that might fail" within eval blocks. Then you can check $@ along with the various arguments that are returned via the calls to login(), cmd(), etc.

Cheers,
Matt

P.S. I don't happen to have the code in front of me at the moment, but /msg me if you want to check out my 'cascading' failure with Net::SSH::Perl that pretty much guarantees a working connection or a meaningful error. I'll repost it on request (but don't feel like re-writing it on the fly).

  • Comment on Re: Connection test : Net::SSH::Perl : $ssh->login - detecting failure

Replies are listed 'Best First'.
Re^2: Connection test : Net::SSH::Perl : $ssh->login - detecting failure
by jxh (Acolyte) on Feb 21, 2006 at 19:53 UTC
    Hi all, have wrapped in eval an it is now functioning satisfactorily. ( And I have learnt eval as Im still fairly new to this ! ) Case closed. Thanks again.

    NB - I now have a separate issue, getting error : Protocol error: expected packet type 20, got 93 at C:/Perl/site/lib/Net/SSH/Perl/Packet.pm line 221 when connecting. Can anyone give me any pointers ?