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

55

Lors de la tentative d'exécution d'un binaire distant à l'aide de sudo sur la boîte distante:

ssh remotehost "sudo ./binary"

Je vois cette erreur:

  

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

Comment puis-je contourner ce problème?

EDIT ce n’est certainement pas un doublon de la question suggérée en tant que telle. Les réponses y sont totalement dénuées de pertinence. En fait, ces modifications apportées au fichier sudoers étaient déjà appliquées à l’hôte distant.

    
posée Drew Noakes 15.04.2013 - 16:32
la source

5 réponses

64

Une méthode simple consiste à spécifier -t :

ssh -t remotehost "sudo ./binary"

À partir de la page de manuel:

  

Force l'allocation de pseudo-tty. Cela peut être utilisé pour exécuter des programmes basés sur des écrans arbitraires sur une machine distante, ce qui peut être très utile, par ex. lors de la mise en œuvre des services de menu. Plusieurs options -t 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 y a peut-être une meilleure façon. J'aimerais en entendre parler si oui:)

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

    
réponse donnée Drew Noakes 15.04.2013 - 16:32
la source
16

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 ./binary

Cela indique à sudo de lire le mot de passe 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 ne permettant pas à l'utilisateur d'entrer un mot de passe.
  2. Dans un environnement chrooté, l'accès à tty1 peut être un peu compliqué, et ctrl-alt f2 - to tty2 est impossible, car il s'agit d'un environnement non-chrooté.

Par exemple: Installation / réparation manuelle de Linux ou du chargeur de démarrage, en utilisant un environnement chroot (tel que Archlinux et arch-chroot).

    
réponse donnée elika kohen 22.01.2016 - 19:45
la source
5

Vous devez définir un terminal / une application capable de lire le mot de passe. Il existe deux variantes:

  1. export SUDO_ASKPASS=/usr/libexec/openssh/ssh-askpass
  2. vim /etc/sudoers (valeurs par défaut visibles)
réponse donnée user282246 16.05.2014 - 17:51
la source
3

Il échoue, car sudo tente d'inviter le mot de passe root et qu'il n'y a pas de pseudo-tty 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 ).

    
réponse donnée kenorb 30.03.2015 - 19:28
la source
2

Vous pouvez également créer un fichier comme "sudo_shutdown" dans /etc/sudoers.d, avec un contenu:

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

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

    
réponse donnée Peter 08.04.2017 - 15:38
la source

Lire d'autres questions sur les étiquettes