This is an interesting proposal. I'll have to do some tests with this. Thanks. I'll report back with my findings.

Update: I'm still working on this test case. I've got something implemented using Telnet, but I need to do some more testing. I'll post code tomorrow morning.

In the meantime, how would you handle waiting for all the async open requests to complete? I this what wait_for_master is for? My current solution loops checking for $ssh->wait_for_master(1) returning true.

Thank you. So far, it looks like OpenSSH+Telnet will do what we need it to, although I am having to make some adjustments for the use of Telnet.

BTW, it would be nice (i.e. enhancement request) if $ssh->error provided a message that could differentiate between password, connect, and timeout failures: I get "unable to establish master SSH connection: bad password or master process exited unexpectedly" for authentication, for connect (socket not open), and for timeout errors. I need to be able to differentiate (that was pretty easy to do with Net::SSH2). Unless you have a better test, it looks like I'll need to try a socket connect before the opens to differentiate.