Это потому, что exec.sh является локальным и выполняет команду на удаленной машине. Итак, если вы убьете локальный процесс, удаленный процесс все равно будет работать.
Чтобы достичь того, что вы хотите, вам нужно, чтобы exec.sh ловил СИГНАЛ нажатия CTRL+C и перед самоуничтожением уничтожал команду на удаленном хосте.
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
Осторожно :python — очень общий процесс для уничтожения. ID процесса лучше сохранять при запуске, а потом специально убивать по ID