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.)