Linux – How to make ssh fail if port forwarding fails

linuxsolarissshssh-tunnel

I have a bash script that runs ssh to create a port forward, using a command like this:

ssh -N -i keyfile -L 1000:localhost:22 *remote_ip*

There are occasions where the listen port may be busy, so this command gives the error:

channel_setup_fwd_listener: cannot listen to port: 1000
Could not request local forwarding.

However, the ssh connection remains up and the ssh command blocks. How can I make ssh actually fail when this occurs, so my script can handle it?

Unfortunately, I also need to support this on Solaris (Intel), and the ssh command there doesn't support the ExitOnForwardFailure option – any ideas in this case?

Best Answer

If you check the ssh man page, you'll find there is a config option called ExitOnForwardFailure and you can specify it on the command line by adding:

-o "ExitOnForwardFailure yes"

All the ssh config options are described in the ssh_config and sshd_config man pages. If you find the option is not supported, you may have to upgrade to a newer version of ssh.

Good Luck.