¿Cómo reparar el error ‘sudo: no tty presente y no askpass program specified’?

Estoy tratando de comstackr algunas fonts usando un archivo MAKE. En el archivo MAKE hay un montón de comandos que deben ejecutarse como sudo .

Cuando compilo las fonts desde un terminal, todo va bien y la marca se pausa la primera vez que se ejecuta un comando sudo esperando la contraseña. Una vez que escriba la contraseña, realice currículos y complete.

Pero me gustaría poder comstackr las fonts en NetBeans. Entonces, comencé un proyecto y mostré netbeans donde encontrar las fonts, pero cuando compilo el proyecto me da el error:

 sudo: no tty present and no askpass program specified 

La primera vez que golpea un comando sudo .

He buscado el problema en Internet y todas las soluciones que encontré apuntan a una cosa: deshabilitar la contraseña para este usuario. Dado que el usuario en cuestión aquí es root. No quiero hacer eso.

hay alguna otra solucion?

Conceder al usuario el uso de ese comando sin pedir una contraseña debería resolver el problema. Primero abra una consola de shell y escriba:

 sudo visudo 

Luego edite ese archivo para agregarlo al final:

 username ALL = NOPASSWD: /fullpath/to/command, /fullpath/to/othercommand 

p.ej

 john ALL = NOPASSWD: /sbin/poweroff, /sbin/start, /sbin/stop 

permitirá al usuario ‘john’ sudo apagar, iniciar y detener sin que se le pida una contraseña.

Mire la parte inferior de la pantalla para ver las teclas que necesita usar en visudo (esto por cierto no es vi) y salga sin guardar al primer signo de algún problema. Advertencia de salud: la corrupción de este archivo tendrá graves consecuencias, edítelo con cuidado.

Tratar:

 ssh -t remotehost "sudo " 

Esto eliminará los errores anteriores.

Tratar:

  1. Use la línea NOPASSWD para todos los comandos, es decir:

     jenkins ALL=(ALL) NOPASSWD: ALL 
  2. Coloque la línea después de todas las demás líneas en el archivo sudoers .

Eso funcionó para mí (Ubuntu 14.04).

Después de todas las alternativas, encontré:

 sudo -S  

La opción -S (stdin) hace que sudo lea la contraseña de la entrada estándar en lugar del dispositivo terminal.

Fuente

sudo por defecto leerá la contraseña desde el terminal conectado. Su problema es que no hay una terminal conectada cuando se ejecuta desde la consola de netbeans. Por lo tanto, debe usar una forma alternativa de ingresar la contraseña: el llamado askpass .

El progtwig askpass no es un progtwig en particular, sino cualquier progtwig que puede solicitar una contraseña. Por ejemplo, en mi sistema x11-ssh-askpass funciona bien.

Para hacer eso debes especificar qué progtwig usar, ya sea con la variable de entorno SUDO_ASKPASS o en el archivo sudo.conf (ver man sudo para más detalles).

Puede forzar a sudo a usar el progtwig askpass usando la opción -A . Por defecto, lo usará solo si no hay un terminal conectado.

Prueba este:

 echo '' | sudo -S my_command 

Si por casualidad viniste aquí porque no puedes sudo dentro del Ubuntu que viene con Windows10

  1. Edite el archivo / etc / hosts desde Windows (con el Bloc de notas), estará ubicado en: %localappdata\lxss\rootfs\etc , agregue 127.0.0.1 WINDOWS8 , esto eliminará el primer error que no puede encontrar el anfitrión.

  2. Para deshacerse del error no tty present , siempre haga sudo -S

Inicia sesión en tu Linux. Fuego siguiendo los comandos. Tenga cuidado, ya que editar sudoer es una propuesta arriesgada.

 $ sudo visudo 

Una vez que se abre el editor vi, realice los siguientes cambios:

  1. Comentar fuera de los Defaults requiretty

     # Defaults requiretty 
  2. Ve al final del archivo y agrega

     jenkins ALL=(ALL) NOPASSWD: ALL 

Para usuarios de Ubuntu 16.04

Hay un archivo con el que debes leer:

 cat /etc/sudoers.d/README 

Colocando un archivo con el modo 0440 en /etc/sudoers.d/myuser con el siguiente contenido:

 myuser ALL=(ALL) NOPASSWD: ALL 

Debería solucionar el problema.

No olvides:

 chmod 0440 /etc/sudoers.d/myuser 

Asegúrate de que el comando que estás haciendo sea parte de tu PATH .

Si tiene una entrada de sudoers comando única (o múltiple, pero no TODA), obtendrá el sudo: no tty present and no askpass program specified cuando el comando no es parte de su ruta (y la ruta completa no está especificada) .

Puede solucionarlo agregando el comando a su PATH o invocando con una ruta absoluta, es decir,

sudo /usr/sbin/ipset

En lugar de

sudo ipset

En Jenkins :

 echo '' | sudo -S command 

Ej . : –

 echo '******' | sudo -S service nginx restart 

Puede usar el complemento de contraseña de máscara para ocultar su contraseña

Command sudo falla al intentar solicitar la contraseña de root y no hay pseudo-tty asignado (ya que es parte de la secuencia de comandos).

Debe iniciar sesión como root para ejecutar este comando 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 pertenece al grupo de admin (o wheel ).

Idealmente (más seguro) sería limitar los privilegios de root solo a comandos específicos que se pueden especificar como %admin ALL=(ALL) NOPASSWD:/path/to/program

Esto funcionó para mí:

 echo "myuser ALL=(ALL) NOPASSWD:ALL" >> /etc/sudoers 

donde su usuario es “myuser”

para una imagen Docker, eso sería:

 RUN echo "myuser ALL=(ALL) NOPASSWD:ALL" >> /etc/sudoers 

Este error también puede surgir cuando intenta ejecutar un comando de terminal (que requiere contraseña de root) de algún script que no sea shell, por ejemplo, sudo ls (en los backticks) de un progtwig de Ruby. En este caso, puede usar la utilidad Esperar ( http://en.wikipedia.org/wiki/Expect ) o sus alternativas.
Por ejemplo, en Ruby para ejecutar sudo ls sin obtener sudo: no tty present and no askpass program specified , puede ejecutar esto:

 require 'ruby_expect' exp = RubyExpect::Expect.spawn('sudo ls', :debug => true) exp.procedure do each do expect "[sudo] password for _your_username_:" do send _your_password_ end end end 

[esto usa una de las alternativas a Expect TCL extension: ruby_expect gem].

Para la referencia, en caso de que alguien más se encuentre con el mismo problema, estuve atascado durante una buena hora con este error, que no debería ocurrir ya que estaba usando el parámetro NOPASSWD.

Lo que NO sabía es que sudo puede generar exactamente el mismo mensaje de error cuando no hay tty y el comando que el usuario intenta ejecutar no es parte del comando permitido en el archivo / etc / sudoers.

Aquí un ejemplo simplificado de mi contenido de archivo con mi problema:

 bguser ALL = NOPASSWD: \ command_a arg_a, \ command_b arg_b \ command_c arg_c 

Cuando bguser intente lanzar “sudo command_b arg_b” sin ningún tty (se usa bguser para algún daemon), entonces encontrará el error “no tty present and no askpass program specified”.

¿Por qué?

Porque falta una coma al final de la línea en el archivo / etc / sudoers …

(Incluso me pregunto si este es un comportamiento esperado y no un error en sudo ya que el mensaje de error correcto para dicho caso debería ser “Lo sentimos, el usuario bguser no puede ejecutarlo, etc.”)

Recibí este error porque había limitado a mi usuario a un solo ejecutable ‘systemctl’ y había configurado incorrectamente el archivo visudo.

Esto es lo que tuve:

 jenkins ALL=NOPASSWD: systemctl 

Sin embargo, debe incluir la ruta completa al ejecutable, incluso si está en su ruta de forma predeterminada, por ejemplo:

 jenkins ALL=NOPASSWD: /bin/systemctl 

Esto permite a mi usuario de jenkins reiniciar servicios pero no tener acceso completo a la raíz

Ejecutar scripts de shell que contengan comandos sudo de jenkins podría no ejecutarse como se esperaba. Para arreglar esto, sigue a lo largo

Pasos simples:

  1. En los sistemas basados ​​en Ubuntu, ejecute “$ sudo visudo”

  2. esto abrirá el archivo / etc / sudoers.

  3. Si su usuario de jenkins ya se encuentra en ese archivo, modifíquelo para que se vea así:

jenkins ALL = (ALL) NOPASSWD: TODOS

  1. guarda el archivo

  2. Relanzar su trabajo jenkins

  3. no deberías volver a ver ese mensaje de error 🙂

Nadie contó qué podría causar este error, en caso de migración de un host a otro, recuerde revisar el nombre de host en el archivo sudoers:

Esta es mi configuración de / etc / sudoers

 User_Alias POWERUSER = user_name Cmnd_Alias SKILL = /root/bin/sudo_auth_wrapper.sh POWERUSER hostname=(root:root) NOPASSWD: SKILL 

si no coincide

 uname -a Linux other_hostname 3.10.17 #1 SMP Wed Oct 23 16:28:33 CDT 2013 x86_64 Intel(R) Core(TM) i3-4130T CPU @ 2.90GHz GenuineIntel GNU/Linux 

aparecerá este error:

no hay presente presente y no se ha especificado ningún progtwig askpass

Tal vez la pregunta no está clara acerca de por qué no había ninguna respuesta, pero recibí el mismo mensaje de error cuando intentaba montar sshfs, que requería sudo: el comando es algo como esto:

 sshfs -o sftp_server="/usr/bin/sudo /usr/lib/openssh/sftp-server" user@my.server.tld:/var/www /mnt/sshfs/www 

agregando la opción -o debug

 sshfs -o debug -o sftp_server="/usr/bin/sudo /usr/lib/openssh/sftp-server" user@my.server.tld:/var/www /mnt/sshfs/www 

Tenía el mismo mensaje de esta pregunta:

 sudo: no tty present and no askpass program specified 

Entonces al leer la respuesta de otros, me convertí en un archivo en /etc/sudoer.d/user en my.server.tld con:

 user ALL=NOPASSWD: /usr/lib/openssh/sftp-server 

y ahora puedo montar el disco sin darle demasiado a mi usuario.

Otras opciones, no basadas en NOPASSWD:

  • Inicie Netbeans con el privilegio de root ((sudo netbeans) o similar) que presumiblemente dividirá el proceso de comstackción con root y así sudo tendrá éxito automáticamente.
  • Realice las operaciones que necesita para hacer suexec: conviértalos en root y establezca el modo en 4755. (Esto, por supuesto, permitirá que cualquier usuario de la máquina los ejecute). De esta forma, no necesitan sudo en absoluto.
  • La creación de archivos de disco duro virtuales con sectores de inicio no debería necesitar sudo en absoluto. Los archivos son solo archivos, y los sectores de inicio son solo datos. Incluso la máquina virtual no debería necesitar necesariamente root, a menos que realice el reenvío avanzado de dispositivos.