standard specified program present must askpass and linux sudo tty

linux - specified - ¿Cómo corregir ''sudo: no tty presente y no se especificó el programa askpass'' error?



standard in must be a tty (21)

Estoy tratando de compilar algunas fuentes usando un makefile. En el archivo make hay un montón de comandos que deben ejecutarse como sudo .

Cuando compilo las fuentes de un terminal, todo va bien y la marca se detiene la primera vez que se ejecuta un comando sudo esperando la contraseña. Una vez que escribo la contraseña, hago reanudar y completar.

Pero me gustaría poder compilar las fuentes en NetBeans. Entonces, comencé un proyecto y le mostré a netbeans dónde encontrar las fuentes, pero cuando compilo el proyecto 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?


Asegúrese de que el comando que está sudo sea ​​parte de su PATH .

Si tiene una entrada única (o multi, pero no ALL) de sudoers comando, obtendrá el sudo: no tty present and no askpass program specified cuando el comando no forma parte de su ruta (y no se especifica la ruta completa) .

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

sudo /usr/sbin/ipset

En lugar de

sudo ipset


Creo que puedo ayudar a alguien con mi caso.

Primero, cambié la configuración del usuario en /etc/sudoers refiriéndose a la respuesta anterior. Pero todavía no funcionó.

myuser ALL=(ALL) NOPASSWD: ALL %mygroup ALL=(ALL:ALL) ALL

En mi caso, myuser estaba en el mygroup . Y no necesitaba grupos. Por lo tanto, eliminado esa línea. (No debería eliminar esa línea como yo, solo marca el comentario).

myuser ALL=(ALL) NOPASSWD: ALL

¡Funciona!


Después de todas las alternativas, encontré:

sudo -S <cmd>

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

Source


El comando sudo falla al intentar solicitar una contraseña de root y no hay ningún pseudo-tty asignado (ya que forma parte del script).

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

A continuación, asegúrese de que su usuario pertenece al grupo de admin (o wheel ).

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


Este error también puede surgir cuando intenta ejecutar un comando de terminal (que requiere una contraseña de root) desde algún script que no sea de shell, por ejemplo, sudo ls (en backticks) desde un programa Ruby. En este caso, puede usar la utilidad Expect ( 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 para esperar la extensión TCL: ruby_expect gema].


Esto funcionó para mí:

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

donde tu usuario es "myuser"

para una imagen de Docker, eso sería:

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


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

$ sudo visudo

Una vez que vi editor abre los siguientes cambios:

  1. Comentario fuera de Defaults requiretty

    # Defaults requiretty

  2. Ir al final del archivo y añadir

    jenkins ALL=(ALL) NOPASSWD: ALL


La ejecución de scripts de shell que contienen comandos sudo en ellos desde jenkins podría no ejecutarse como se esperaba. Para arreglar esto, sigue adelante

Pasos simples:

  1. En sistemas basados ​​en Ubuntu, ejecute "$ sudo visudo"

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

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

jenkins ALL = (ALL) NOPASSWD: ALL

  1. guarda el archivo

  2. Relanzar su trabajo jenkins

  3. no deberías ver ese mensaje de error otra vez :)


Nadie dijo qué podría causar este error, en caso de migración de un host a otro, recuerde acerca de la verificación del nombre de host en el archivo sudoers:

Así que esta es mi / etc / sudoers config

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 tty presente y no se ha especificado ningún programa de paso de entrada


Otorgar al usuario el uso de ese comando sin pedir contraseña debe resolver el problema. Primero abre una consola shell y escribe:

sudo visudo

Luego edite ese archivo para agregar 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'' apagar sudo, iniciar y detener sin que se le solicite la contraseña.

Mire en la parte inferior de la pantalla las pulsaciones de teclado que necesita usar en visudo (esto no es vi) y salga sin guardar nada al primer signo de cualquier problema. Advertencia de salud: la corrupción de este archivo tendrá graves consecuencias, ¡edite con cuidado!


Otras opciones, no basadas en NOPASSWD:

  • Inicie Netbeans con privilegios de raíz ((sudo netbeans) o similar) que presumiblemente mantendrán el proceso de construcción con la raíz y, por lo tanto, sudo se ejecutará automáticamente.
  • Realice las operaciones que necesita para realizar suexec: haga que sean propiedad de root y establezca el modo en 4755. (Esto, por supuesto, permitirá que cualquier usuario de la máquina los ejecute). De esa manera, no necesitan sudo en absoluto.
  • Crear archivos de disco duro virtual con sectores de arranque no debería necesitar sudo en absoluto. Los archivos son solo archivos, y los sectores de arranque son solo datos. Incluso la máquina virtual no debería necesariamente necesitar root, a menos que haga un reenvío avanzado de dispositivos.

Para la referencia, en caso de que alguien más encuentre el mismo problema, me quedé 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 era que sudo puede generar exactamente el mismo mensaje de error cuando no hay tty y el comando que el usuario intenta iniciar no forma 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 intentará lanzar "sudo command_b arg_b" sin ningún tty (se está usando bguser para algún demonio), aparecerá el error "no tty presente y no se ha especificado ningún programa de paso de contraseña".

¿Por qué?

Debido a que 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 tal caso debería ser "Lo siento, el usuario bguser no puede ejecutar, etc.")


Para usuarios de Ubuntu 16.04.

Hay un archivo que tienes que leer con:

cat /etc/sudoers.d/README

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

myuser ALL=(ALL) NOPASSWD: ALL

Debería arreglar el problema.

No olvides:

chmod 0440 /etc/sudoers.d/myuser


Prueba este:

echo '''' | sudo -S my_command


Recibía este error porque había limitado a mi usuario a un solo ejecutable ''systemctl'' y había configurado mal 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 jenkins reiniciar los servicios pero no tener acceso completo a la raíz


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), se ubicará en: %localappdata/lxss/rootfs/etc , agregue 127.0.0.1 WINDOWS8 , esto eliminará el primer error que no pueda encontrar el anfitrión.

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


Tal vez la pregunta no esté clara de por qué ninguna respuesta fue igual a ella, pero tuve 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" [email protected]:/var/www /mnt/sshfs/www

añadiendo la opción -o debug

sshfs -o debug -o sftp_server="/usr/bin/sudo /usr/lib/openssh/sftp-server" [email protected]:/var/www /mnt/sshfs/www

Tuve el mismo mensaje de esta pregunta:

sudo: no tty present and no askpass program specified

Entonces, leyendo la respuesta de otros, llegué a hacer un archivo en /etc/sudoer.d/user en my.server.tld con:

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

y ahora puedo montar la unidad sin dar demasiado derecho adicional a mi usuario.


Tratar:

  1. Usar la línea NOPASSWD para todos los comandos, quiero decir:

    jenkins ALL=(ALL) NOPASSWD: ALL

  2. Ponga la línea después de todas las otras líneas en el archivo sudoers .

Eso me funcionó (Ubuntu 14.04).


Tratar:

ssh -t remotehost "sudo <cmd>"

Esto eliminará los errores anteriores.


sudo por defecto leerá la contraseña del terminal adjunto. Su problema es que no hay un terminal conectado cuando se ejecuta desde la consola de netbeans. Entonces, tiene que usar una forma alternativa de ingresar la contraseña: eso se llama el programa askpass .

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

Para hacerlo, debe especificar qué programa usar, ya sea con la variable de entorno SUDO_ASKPASS o en el archivo sudo.conf (consulte man sudo para obtener más información).

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


En Jenkins :

echo ''<your-password>'' | sudo -S command

Por ejemplo :

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

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