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.
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.
Comment puis-je contourner cela?
Sudo: no tty present and no askpass program specified
Au lieu de cela, essayez:
Sudo -S ./binary
Ceci oblige Sudo à lire le mot de passe à partir de l'entrée standard, stdin.
Dans les environnements chrootés, ces autres réponses peuvent ne pas fonctionner correctement ... peut-être parce que:
Par exemple: Installer/réparer manuellement Linux ou le programme d'amorçage, à l'aide d'un environnement chroot , (comme Archlinux et Arch-chroot).
Vous devez définir un terminal/application qui lira le mot de passe. Il y a deux variantes:
export Sudo_ASKPASS=/usr/libexec/openssh/ssh-askpass
vim /etc/sudoers
(Valeurs visibles par défaut)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
).
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
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.