Corregido: sudo: no hay tty presente y no se especifica ningún programa askpass

La línea de salida especificada del programa no tty present y no askpass es uno de esos mensajes de error ssh que realmente no es tan útil porque no llega al punto de lo que está causando el problema. Lo más probable es que esté trabajando con un TTY válido de algún tipo cuando vea el mensaje y probablemente haya tratado de ingresar su contraseña de sudo a través de ssh sin problemas. Es más que probable que esté lidiando con un error de sintaxis, pero el mensaje no aborda este hecho directamente.

Dado que este es un problema asociado con el propio ssh, es muy probable que pueda reproducir el problema en Linux, FreeBSD, macOS y los servicios Unix de Cygwin en Microsoft Windows. Afortunadamente, la solución debería ser prácticamente la misma en todas estas plataformas.

Método 1: encontrar una terminal para ssh

Si bien es muy probable que ya esté trabajando desde una terminal, probablemente ssh no se dé cuenta de esto. Es posible que aún esté tratando de buscar un emulador de terminal TTY a pesar de que está dentro de una ventana de símbolo del sistema. Intente reproducir el error para probar esto. Configuramos una máquina virtual para que sirviera de ejemplo y ejecutamos ssh [email protected] 'sudo /var/mail/startup.sh' como prueba. Naturalmente, querrá cambiar el comando y la línea ssh a algo que coincida con lo que está tratando de hacer.

Querrá asegurarse de que está iniciando sesión en el servidor que pensó que estaba. Independientemente, verifique si todavía recibe el mensaje de error sudo: no tty present y no askpass program especificado. Lo más probable es que, si todavía lo está recibiendo, lo verá tres veces y posiblemente incluso se le solicite que ingrese su contraseña de la forma en que lo haría si ejecuta sudo localmente en Debian o Ubuntu.

Intente agregar -t después de ssh para corregir su error de sintaxis. Nueve de cada diez veces esto obligará a ssh a asignarse un TTY virtual a sí mismo y pretender que se ejecuta dentro de una terminal real. No tiene que cambiar nada más sobre su comando. Simplemente agregue la opción -t después de las letras ssh y luego mantenga el host y el comando pasado igual. También querrá tener esto en cuenta si alguna vez tiene que ejecutar ssh en la última parte de su comando.

Por ejemplo, si recibiera este mismo tipo de error al ejecutar un comando que estaba formateado como ssh -t [email protected] 'ssh [email protected]' , tendría que mantener la opción -t después del primer ssh para Prevenirlo. Tenga en cuenta que si luego cambió el segundo comando para producir o consumir datos, entonces no querrá usar -t en absoluto. Por ejemplo, si comenzó a ejecutar cat en lugar de un script, podría volcar el -t ya que no necesitaría asignar una terminal para eso.

Método 2: parchear el archivo visudo

También puede tener un problema de configuración que produce este error. Modifique el archivo visudo emitiendo el comando sudo visudo y tenga en cuenta que nunca querrá editar este archivo de otra manera. Debería encontrar una línea que incluya ALL = NOPASSWD seguida de los tipos de comandos que no necesita para ingresar la contraseña del administrador para ejecutar.

Cada comando individual debe terminar con una coma, excepto el último de la línea. Por lo tanto, si tiene algo que se lee como / sbin / poweroff / sbin / start / sbin / stop, los tratará como un solo comando y le arrojará el error. Del mismo modo, si le falta un comando que está intentando ejecutar a través de ssh, también obtendrá este error. Realice los ajustes necesarios y guarde el archivo antes de comprobar si el error aún es reproducible.

Si aún tiene el error incluso después de hacerlo y reiniciar el servicio, intente el  siguiente comando en la imagen a continuación  y asegúrese de que la línea PermitTTY muestre la palabra sí después. Si esta es la última línea de su archivo, asegúrese de que haya una nueva línea en blanco después. GNU nano realiza esta tarea automáticamente de forma predeterminada.

Deberá reiniciar los servicios relevantes antes de intentar reproducir nuevamente el mensaje de error.