... but when the sub is invoked via the html interface, ...
As a first step, I would assume that the user your web server launches your program as is not the user that you're using on the console, or that it has less permissions. Also, it won't have an interactive terminal connected, so ssh will not interactively ask for user/passwords (maybe).
To test this "interactivity" idea, consider launching your program with STDIN redirected:
/path/to/program </dev/null
If that also fails, or in any case, I recommend moving away from using passwords with SSH and instead using a (passwordless) key. This is more or less the same security, but at least allows you to separate the permission to read the source code of your program from the permission to read the file allowing the remote access.
In any case, you should limit the key on the remote machine to the specific set of commands your program will be issuing.