I've recently had good luck with Net::SSH::Perl using forked children, rather than threads. If it's early enough in your design, and you're on a flavor of unix, consider forking rather than threading. (I know threads are more popular than forks these days, but unix is actually quite good at forking.)
I used socketpair() and IO::Select to manage IPC with the kids. Works great.