Você deve passar a opção ssh the -t , por isso aloca um tty (terminal) no lado remoto para executar seu script.
Os comandos que precisam solicitar uma senha (como sudo ) precisam de um terminal, para que possam controlar a E / S do terminal, como impedir a saída de caracteres digitados, para que sua senha não apareça enquanto você estiver digitando.
Quando você executa ssh $host (sem comando), o cliente SSH aloca automaticamente um terminal (portanto, não é necessário -t ), mas se você executá-lo com um comando, como ssh $host /path/to/script , ele será Não aloque um terminal, pois para a maioria dos comandos um terminal não é necessário e simplesmente redirecionar os descritores de arquivo padrão (stdin, stdout, stderr) é suficiente ... A opção -t altera esse comportamento e aloca um terminal mesmo que você esteja passando uma linha de comando.
Consulte a documentação da -t opção na página de manual do SSH. Procure outras referências a pty ou pseudo-terminal nessa página (BTW, eles chamam de pty / pseudo-terminal em vez de tty desde que o terminal não está ligado a um dispositivo real, como um teclado / monitor ou uma porta serial ... para esses propósitos, significa o mesmo.)