Bash script exit on error (set -e) closes putty SSH session

How are you running the script? The circumstances of a subprocess's exit shouldn't affect the shell that ran it... unless you're sourcing the script into your running shell.

For example...

./my-script.sh # this should terminate and leave your shell intact
. my-script.sh # this might terminate and take your shell with it

A 'nix shell is a running process of some shell interpreter (e.g., bash, ksh, csh). "source"ing a script (which you can do in bash with the command source or its alias .) tells that interpreter to open the indicated file and process its contents. In effect, the script becomes a shortcut for entering commands interactively. Functions defined, variables set, and (in your case) exits processed take effect in the original shell.

./my-script.sh is a simple file path. ./ refers to the current directory and my-script.sh to a script within that directory. When the file is marked as executable, the file will be executed. In the case of a script, this means launching a new interpreter process (as defined by the #! line at the top of the script, or /bin/sh by default) and using it to interpret the script. Functions defined, variables set, and exits processed are confined to that new interpreter process.