web-dev-qa-db-fra.com

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

Lorsque vous essayez d'exécuter un binaire distant en utilisant Sudo sur la boîte à distance:

ssh remotehost "Sudo ./binary"

Je vois cette erreur:

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

Comment puis-je contourner cela?

EDIT Ce n’est certainement pas un doublon de la question suggérée en tant que telle. Les réponses sont totalement hors de propos. En fait, ces modifications apportées au fichier sudoers ont déjà été appliquées à l'hôte distant.

64
Drew Noakes

Un moyen simple consiste à spécifier -t:

ssh -t remotehost "Sudo ./binary"

De la page de manuel:

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

Je ne peux pas expliquer exactement pourquoi cela fonctionne, et il pourrait y avoir un meilleur moyen. J'aimerais en entendre parler si oui :)

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

70
Drew Noakes

Question:

Comment puis-je contourner cela?

Sudo: no tty present and no askpass program specified

Réponse alternative

Au lieu de cela, essayez:

Sudo -S ./binary

Ceci oblige Sudo à lire le mot de passe à partir de l'entrée standard, stdin.

Scénarios où cela aide

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

  1. / etc/shadow vs/etc/passwd n’empêchent pas l’utilisateur de saisir un mot de passe.
  2. Dans un environnement chrooté, l'accès à tty1 peut être un peu complexe, et ctrl-alt f2 - to tty2 est irréalisable, car il s'agit d'un tty de l'environnement non chrooté.

Par exemple: Installer/réparer manuellement Linux ou le programme d'amorçage, à l'aide d'un environnement chroot , (comme Archlinux et Arch-chroot).

22
elika kohen

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

  1. export Sudo_ASKPASS=/usr/libexec/openssh/ssh-askpass
  2. vim /etc/sudoers (Valeurs visibles par défaut)
5
user282246

Il échoue, car Sudo tente d’inviter le mot de passe root et aucun pseudo-tty n’est alloué.

Vous devez soit vous connecter en tant que root, soit configurer les règles suivantes dans votre /etc/sudoers (ou: Sudo visudo):

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

Assurez-vous ensuite que votre utilisateur appartient au groupe admin (ou wheel).

2
kenorb

Dans mon cas, j'ai reçu cette erreur parce que je ne spécifiais pas de commande que je voudrais utiliser comme racine dans sudoers

Quelque chose comme

/etc/sudoers.d/myuser:

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

a travaillé pour moi

1
GarouDan

Vous pouvez également créer un fichier du type "Sudo_shutdown" dans /etc/sudoers.d, avec le contenu:

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

Cela permet aux utilisateurs du groupe adm de s’arrêter sans mot de passe.

1
Peter