Isso ocorre porque o exec.sh é local e executa um comando em uma máquina remota. Então, se você matar o processo local, o processo remoto ainda será executado.
Para conseguir o que você quer, você precisa do exec.sh para capturar o SIGNAL de CTRL + C, e antes de se matar para matar o comando no host remoto.
function trap_ctrlc ()
{
# kill the remote process
ssh user@pass "pkill -9 python"
exit 2
}
# initialise trap to call trap_ctrlc function
# when signal 2 (SIGINT) is received
trap "trap_ctrlc" 2
your script here
Cuidado: o python é um processo muito genérico para matar. É melhor salvar o ID do processo ao iniciá-lo e, em seguida, matá-lo especificamente por ID