93 votes

sudo : aucun tty présent et aucun programme askpass spécifié

Lorsque l'on tente d'exécuter un binaire distant en utilisant sudo sur le boîtier de télécommande :

ssh remotehost "sudo ./binary"

Je vois cette erreur :

sudo: no tty present and no askpass program specified

Comment puis-je contourner ce problème ?

101voto

Drew Noakes Points 5178

Un moyen simple est de spécifier -t :

ssh -t remotehost "sudo ./binary"

De la page de manuel :

Forcer l'allocation de pseudo-tty. Ceci peut être utilisé pour exécuter des programmes arbitraires basés sur l'écran sur une machine distante, ce qui peut être très utile, par exemple lors de l'implémentation de services de menu. Les options -t multiples forcent l'allocation du tty, même si ssh n'a pas de tty local.

Je ne peux pas expliquer exactement pourquoi cela fonctionne, et il existe peut-être une meilleure méthode. Si c'est le cas, j'aimerais en être informé :)

@psusi explique pourquoi cela fonctionne dans un commentaire ci-dessous.

38voto

Cormac Mulhall Points 507

Question :

Comment puis-je contourner ce problème ?

sudo: no tty present and no askpass program specified

Autre réponse

Comme alternative, essayez :

sudo -S ./[yourExecutable]

Ceci indique à sudo de lire le mot de passe depuis l'entrée standard, stdin.

Scénarios où cela aide

Dans les environnements chroot, ces autres réponses peuvent ne pas fonctionner correctement ... peut-être parce que :

  1. Conflit /etc/shadow vs /etc/passwd ne permettant pas à l'utilisateur d'entrer un mot de passe.
  2. Dans un environnement chrooté, l'accès à tty1 peut être un peu difficile, et ctrl-alt f2 -- vers tty2 est irréalisable, car c'est un tty de l'environnement non chrooté.

Par exemple : Installer/réparer manuellement linux ou le bootloader, en utilisant un environnement chroot, (tel que Archlinux et arch-chroot).

5voto

kenorb Points 8840

Il échoue, car sudo essaie de demander le mot de passe root et il n'y a pas de pseudo-tty alloué.

Vous devez soit vous connecter en tant que root, soit mettre en place les règles suivantes dans votre système d'exploitation. /etc/sudoers (ou : sudo visudo ) :

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

Ensuite, assurez-vous que votre utilisateur appartient à admin groupe (ou wheel ).

4voto

user282246 Points 49

Vous devez définir le terminal/application qui lira le mot de passe. Il existe deux variantes :

  1. export SUDO_ASKPASS=/usr/libexec/openssh/ssh-askpass
  2. vim /etc/sudoers (Par défaut, visiblepw)

4voto

jjrv Points 2390

Dans mon cas, j'ai reçu cette erreur parce que je n'ai pas spécifié une commande que je voudrais utiliser en tant que root dans les sudoers.

Quelque chose comme

/etc/sudoers.d/myuser :

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

a fonctionné pour moi

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X