Estoy tratando de ejecutar un comando sobre SSH como este en un documento aquí:
ssh example.com <<END
sudo /etc/init.d/apache2 reload
END
Lo que normalmente funciona, excepto cuando estoy tratando de ejecutar algo que necesita entrada, como la contraseña para sudo. En ese caso, recibo el siguiente mensaje:
sudo: no tty present and no askpass program specified
Sé que puedo usar la -t
bandera en SSH para asignar un pseudo-tty como este:
ssh -t example.com "sudo /etc/init.d/apache2 reload"
Y funcionará, pero cuando intento lo mismo con here-document, no funciona y obtendré el mismo error acerca de que no hay tty presente:
ssh -t example.com <<END
sudo /etc/init.d/apache2 reload
END
¿Alguna idea de cómo puedo hacer que esto funcione?
Además, en caso de que se pregunte por qué quiero que funcione con el documento aquí en lugar de simplemente pasarlo en la misma línea, es porque los comandos de entrada (puede haber algunos) provienen de un archivo de configuración leído por un script y he oído que evita el problema de escapar de los comandos para las comillas, comillas dobles, etc.
¿Por qué no simplemente almacenar el documento aquí en una variable que se dará
ssh -t
como argumento de comando?En una nota más general, use
ssh -T
o especifique el shell remoto como argumento de comando si el stdin del host remoto se redirige desde un heredoc (para evitar quessh
intente asignar una pty).fuente