Not necessarily, nowadays all UNIX systems follow the POSIX standard so it is possible to write fairly portable shell code. Network equipment (switches, routers, etc.) exposing custom shells, often on top of crippled SSH implementations are another matter.
in reply to Re^6: Correct way to use Net:SSH2 module
in thread Correct way to use Net:SSH2 module
In any case, what it is unreliable is talking (via stdio) to a shell running in interactive mode. Using the SSH capability to launch individual commands on the remote host, creating a new channel for every command, is quite reliable.