sudo: sin tty presente y sin programa askpass especificado

73

Cuando intente ejecutar un binario remoto usando sudoen la caja remota:

ssh remotehost "sudo ./binary"

Veo este error:

sudo: sin tty presente y sin programa askpass especificado

¿Cómo puedo solucionar esto?

EDITAR esto definitivamente no es un duplicado de la pregunta sugerida como tal. Las respuestas allí son completamente irrelevantes. De hecho, esos cambios en el archivo sudoers ya se aplicaron al host remoto.

Drew Noakes
fuente

Respuestas:

78

Una forma simple es especificar -t:

ssh -t remotehost "sudo ./binary"

Desde la página del manual:

Forzar asignación de pseudo-tty. Esto se puede usar para ejecutar programas arbitrarios basados ​​en pantalla en una máquina remota, lo que puede ser muy útil, por ejemplo, al implementar servicios de menú. Varias opciones -t fuerzan la asignación de tty, incluso si ssh no tiene tty local.

No puedo explicar exactamente por qué esto funciona, y puede haber una mejor manera. Me gustaría saber si es así :)

@psusi explica por qué esto funciona en un comentario a continuación.

Drew Noakes
fuente
14
Funciona porque sudorequiere un tty para solicitar una contraseña, y al especificar comandos para ejecutar ssh, no asigna uno de forma predeterminada, ya que normalmente se usa para ejecutar comandos no interactivos que pueden transferir datos binarios, que pueden disparar el tty .
psusi
@psusi ¿Conoces la respuesta a esta pregunta relacionada? unix.stackexchange.com/questions/110841
trusktr
También se -ttrequiere cuando se pasa un comando usando heredoc
Rufus
26

Pregunta:

¿Cómo puedo solucionar esto?

sudo: no tty present and no askpass program specified

Respuesta alternativa

Como alternativa, intente:

sudo -S ./binary

Esto dirige a sudo a leer la contraseña de la entrada estándar, stdin.

Escenarios donde esto ayuda

En entornos chroot, estas otras respuestas pueden no funcionar correctamente ... tal vez porque:

  1. / etc / shadow vs / etc / passwd no permite al usuario ingresar una contraseña.
  2. En un entorno chroot-ed, el acceso a tty1 puede ser un poco irregular, y ctrl-alt f2 - a tty2 no es factible, porque es un tty del entorno no-chroot-ed.

Por ejemplo: Instalación / reparación manual de linux o el gestor de arranque, utilizando un entorno chroot (como Archlinux y arch-chroot).

elika kohen
fuente
Me sale un sudo: ./binary: error de comando no encontrado cuando ejecuto sudo -S ./binary, ¿qué da?
Ajit Goel
5

Debe definir la terminal / aplicación que leerá la contraseña. Hay dos variantes:

  1. export SUDO_ASKPASS=/usr/libexec/openssh/ssh-askpass
  2. vim /etc/sudoers (Por defecto visiblepw)
usuario282246
fuente
11
¿No es mejor usarlo en visudolugar de vim /etc/sudoersevitar potencialmente bloquearse de su máquina debido a un error en su edición?
Drew Noakes
2

Falla porque sudoestá intentando solicitar la contraseña de root y no hay pseudo-tty asignado.

Debe iniciar sesión como root o configurar las siguientes reglas en su /etc/sudoers (o:) sudo visudo:

# Members of the admin group may gain root privileges
%admin  ALL=(ALL) NOPASSWD:ALL

Luego, asegúrese de que su usuario pertenezca al admingrupo (o wheel).

kenorb
fuente
Si bien esto no es cierto (no se proporciona evidencia de esto, y los usuarios en el grupo de administración con ese código en centos y sistemas ubuntu aún reciben el error), es un gran consejo para la creación remota de grupos y reglas basadas en esos grupos para escalada de tareas
MrMesees
2

También puede crear un archivo como "sudo_shutdown" en /etc/sudoers.d, con contenido:

# Allow admins to shutdown without pass
%adm ALL=(ALL) NOPASSWD: /sbin/shutdown

Esto permite a los usuarios que están en el grupo adm cerrar sin una contraseña.

Peter
fuente
3
¿Tenía la intención de editar esto para cubrir "no tty present"
Elder Geek
2

En mi caso, recibí este error porque no estaba especificando un comando que me gustaría usar como root en los sudoers

Algo como

/etc/sudoers.d/myuser:

myuser ALL=(root) NOPASSWD: \
    /bin/ls -la

trabajó para mi

GarouDan
fuente