Estou tentando executar um comando sobre SSH como este em um documento aqui:
ssh example.com <<END
sudo /etc/init.d/apache2 reload
END
O que normalmente funciona, exceto quando estou tentando executar algo que precisa de entrada, como a senha do sudo. Nesse caso, estou recebendo a seguinte mensagem:
sudo: no tty present and no askpass program specified
Eu sei que posso usar o -t
sinalizador no SSH para alocar uma pseudo-tty como esta:
ssh -t example.com "sudo /etc/init.d/apache2 reload"
E funcionará, mas quando eu tentar a mesma coisa com o documento aqui, ele não funcionará e eu receberei o mesmo erro sobre a ausência de tty:
ssh -t example.com <<END
sudo /etc/init.d/apache2 reload
END
Alguma idéia de como eu posso fazer isso funcionar?
Além disso, caso você esteja se perguntando por que eu quero que ele funcione com o documento aqui, em vez de apenas passá-lo na mesma linha, é porque os comandos de entrada (pode haver alguns) vêm de um arquivo de configuração lido por um script e eu ouvi-lo evita o problema de escapar dos comandos para as aspas, aspas duplas, etc.
Por que não simplesmente armazenar o documento aqui em uma variável que será fornecida
ssh -t
como um argumento de comando.Em uma observação mais geral, use
ssh -T
ou especifique o shell remoto como um argumento de comando se o stdin do host remoto estiver sendo redirecionado de um heredoc (para impedir assh
tentativa de alocar um pty).fonte