J'essaye de compiler quelques sources en utilisant un makefile. Dans le makefile, il y a un tas de commandes qui doivent être exécutées en tant que sudo
.
Lorsque je compile les sources à partir d'un terminal, tout se passe bien et la création est interrompue la première fois qu'une sudo
commande est exécutée en attendant le mot de passe. Une fois que j'ai tapé le mot de passe, faites des CV et terminez.
Mais j'aimerais pouvoir compiler les sources dans NetBeans. J'ai donc commencé un projet et montré à netbeans où trouver les sources, mais quand je compile le projet, il donne l'erreur:
sudo: no tty present and no askpass program specified
La première fois qu'il frappe une sudo
commande.
J'ai recherché le problème sur Internet et toutes les solutions que j'ai trouvées pointent vers une chose: désactiver le mot de passe pour cet utilisateur. Puisque l'utilisateur en question ici est root. Je ne veux pas faire ça.
N 'y a-t-il pas une autre solution?
sudo -n my-command
fonctionné pour moi. Salut!sudo: a password is required
Réponses:
Accorder à l'utilisateur d'utiliser cette commande sans demander de mot de passe devrait résoudre le problème. Ouvrez d'abord une console shell et tapez:
Modifiez ensuite ce fichier pour l'ajouter à la fin:
par exemple
permettra à l'utilisateur
john
de sudopoweroff
,start
etstop
sans être invité pour le mot de passe.Regardez en bas de l'écran pour les touches que vous devez utiliser dans visudo - ce n'est pas vi d'ailleurs - et quittez sans enregistrer au premier signe de problème. Avertissement de santé: la corruption de ce fichier aura de graves conséquences, modifiez-le avec soin!
la source
Essayer:
Utilisez la
NOPASSWD
ligne pour toutes les commandes, je veux dire:Mettez la ligne après toutes les autres lignes du
sudoers
fichier.Cela a fonctionné pour moi (Ubuntu 14.04).
la source
jenkins ALL=(ALL) NOPASSWD: /var/lib/jenkins/wrapper_script
jenkins
est juste un nom d'utilisateur? Il doit s'agir du nom d'utilisateur de l'utilisateur de la machine hôte? Que faire si le nom d'utilisateur sur la machine hôte correspond au nom d'utilisateur du serveur distant?Essayer:
Cela supprimera les erreurs ci-dessus.
la source
-t Force pseudo-tty allocation. This can be used to execute arbitrary screen-based programs on a remote machine
voir aussi: sudo-no-tty-present-and-no-askpass-program-specifiedsudo -A
Permet également de définir unsudo
programme askpass, mais je ne vois que les interfaces graphiques. Quelqu'un connaît-il un askpass à autoriserssh remotehost sudo -A askpass
?-A
forsudo
ne prend pas d'arguments et nécessite à la place un environnementSUDO_ASKPASS
ou unsudo.conf
Sossh remotehost sudo -A command
fonctionnerait toujours. Toujours curieux d'un programme askpass basé sur un terminal.Pseudo-terminal will not be allocated because stdin is not a terminal.
:(Après toutes les alternatives, j'ai trouvé:
La source
La commande ci-dessus nécessite toujours la saisie du mot de passe. Pour supprimer la saisie du mot de passe manuellement, dans des cas comme jenkins, cette commande fonctionne:
la source
sudo -S <command>
-true
se trouve juste être une commande fictive qui renvoie un code de sortie de 0 (false
est une commande qui renvoie 1). Merci, c'est la seule vraie réponse, car tous les autres s'attendent à ce que "sudo" fonctionne!Password:
alors rien ne se passe. Je ne peux pas taper le mot de passe.sudo
par défaut lira le mot de passe depuis le terminal connecté. Votre problème est qu'aucun terminal n'est connecté lorsqu'il est exécuté à partir de la console Netbeans. Vous devez donc utiliser une autre manière d'entrer le mot de passe: c'est le programme askpass .Le programme askpass n'est pas un programme particulier, mais tout programme pouvant demander un mot de passe. Par exemple, dans mon système
x11-ssh-askpass
fonctionne bien.Pour ce faire, vous devez spécifier le programme à utiliser, soit avec la variable d'environnement,
SUDO_ASKPASS
soit dans lesudo.conf
fichier (voirman sudo
pour plus de détails).Vous pouvez forcer
sudo
à utiliser le programme askpass en utilisant l'option-A
. Par défaut, il ne l'utilisera que s'il n'y a pas de terminal connecté.la source
-A
ça ne prend pas d'arguments.-A
nécessite un environnementSUDO_ASKPASS
ou unsudo.conf
fichier. Dans ce cas,ssh host "export SUDO_ASKPASS=askpass;sudo -A cat /etc/passwd"
fonctionnerait toujours avec un askpass basé sur un terminal, mais @chandru est beaucoup plus concis ci-dessous avecssh -t ...
Pour les utilisateurs d'Ubuntu 16.04
Il y a un fichier avec lequel vous devez lire:
Placer un fichier avec le mode 0440 dans /etc/sudoers.d/myuser avec le contenu suivant:
Devrait résoudre le problème.
N'oublie pas de:
la source
Essaye celui-là:
la source
[sudo] password for alper: Sorry, try again. [sudo] password for alper: sudo: 1 incorrect password attempt
@sNICkerssssSi par hasard vous êtes venu ici parce que vous ne pouvez pas sudo à l'intérieur d'Ubuntu fourni avec Windows10
Modifiez le fichier / etc / hosts à partir de Windows (avec le Bloc-notes), il sera situé dans
%localappdata\lxss\rootfs\etc
:, ajoutez127.0.0.1 WINDOWS8
, cela supprimera la première erreur selon laquelle il ne peut pas trouver l'hôte.Pour vous débarrasser de l'
no tty present
erreur, faites toujourssudo -S <command>
la source
Connectez-vous à votre Linux. Déclenchez les commandes suivantes. Soyez prudent, car l'édition sudoer est une proposition risquée.
Une fois l'éditeur vi ouvert, apportez les modifications suivantes:
Commenter
Defaults requiretty
Allez à la fin du fichier et ajoutez
la source
À Jenkins :
Par exemple : -
Vous pouvez utiliser le plugin Mask Password pour masquer votre mot de passe
la source
Cela a fonctionné pour moi:
où votre utilisateur est "myuser"
pour une image Docker, ce serait juste:
la source
Assurez-vous que la commande que vous utilisez
sudo
fait partie de votrePATH
.Si vous avez une seule
sudoers
entrée de commande (ou plusieurs, mais pas TOUS) , vous obtiendrez lesudo: no tty present and no askpass program specified
lorsque la commande ne fait pas partie de votre chemin (et que le chemin complet n'est pas spécifié).Vous pouvez le corriger en ajoutant la commande à votre
PATH
ou en l'invoquant avec un chemin absolu, c'est-à-diresudo /usr/sbin/ipset
Au lieu de
sudo ipset
la source
sudoers
%sitd ALL=(lamparna) NOPASSWD: /usr/bin/git_push_to_lamparna.sh, /usr/bin/git
et en utilisantsudo -u lamparna git push --mirror ssh://lamparna@REDMINE/home/lamparna/repos/git/jine/lamparna.git
in git post-update hook returnno tty
, mais en utilisantsudo -u lamparna /usr/bin/git push --mirror ssh://lamparna@REDMINE/home/lamparna/repos/git/jine/lamparna.git
work sans mot de passe.La commande
sudo
échoue car elle essaie de demander le mot de passe root et aucune pseudo-tty n'est allouée (car elle fait partie du script).Vous devez vous connecter en tant que root pour exécuter cette commande ou configurer les règles suivantes dans votre
/etc/sudoers
(ou:)sudo visudo
:Assurez-vous ensuite que votre utilisateur appartient au
admin
groupe (ouwheel
).Idéalement (plus sûr), il faudrait limiter les privilèges root uniquement à des commandes spécifiques qui peuvent être spécifiées comme
%admin ALL=(ALL) NOPASSWD:/path/to/program
la source
sudoers
fichierapache ALL = (ALL) NOPASSWD:/usr/share/apache-tomcat-7.0.61/bin/startup.sh
mais cela ne fonctionne pas pour moi. cela donne l'erreur suivantesudo: >>> /etc/sudoers: syntax error near line 120 <<< sudo: parse error in /etc/sudoers near line 120 sudo: no valid sudoers sources found, quitting sudo: unable to initialize policy plugin
apache ALL=(ALL) NOPASSWD: ALL
mais un risque pour la sécurité. :)Je pense que je peux aider quelqu'un avec mon cas.
Tout d'abord, j'ai changé le paramètre utilisateur en me
/etc/sudoers
référant à la réponse ci-dessus. Mais cela n'a toujours pas fonctionné.Dans mon cas,
myuser
était dans lemygroup
.Et je n'avais pas besoin de groupes. Donc, supprimé cette ligne.
(Ne devrait pas supprimer cette ligne comme moi, juste marquer le commentaire.)
Ça marche!
la source
L'exécution de scripts shell contenant des commandes sudo à partir de jenkins peut ne pas s'exécuter comme prévu. Pour résoudre ce problème, suivez
Étapes simples:
Sur les systèmes basés sur Ubuntu, exécutez "$ sudo visudo"
cela ouvrira le fichier / etc / sudoers.
enregistrez le fichier
Relancez votre travail jenkins
vous ne devriez plus voir ce message d'erreur :)
la source
J'ai pu le faire, mais assurez-vous de suivre les étapes correctement. C'est pour toute personne qui obtient des erreurs d'importation.
Étape 1 : Vérifiez si les fichiers et les dossiers ont un problème de permission d'exécution. Utilisation utilisateur Linux:
Étape 2 : vérifiez quel utilisateur est autorisé à l'exécuter.
Étape 3 : ouvrez le terminal, tapez cette commande.
ajoutez ces lignes au code ci-dessous
il s'agit d'accorder la permission d'exécuter le script et de lui permettre d'utiliser toutes les bibliothèques. L'utilisateur est généralement «personne» ou «www-data».
éditez maintenant votre code comme
allez au terminal pour vérifier si le processus est en cours, tapez ceci ici ...
cela affichera tout le processus en cours d'exécution en python.
Modules complémentaires : utilisez le code ci-dessous pour vérifier les utilisateurs de votre système
Merci!
la source
Cette erreur peut également survenir lorsque vous essayez d'exécuter une commande de terminal (qui nécessite un mot de passe root) à partir d'un script non shell, par exemple
sudo ls
(dans les raccourcis) à partir d'un programme Ruby. Dans ce cas, vous pouvez utiliser l' utilitaire Expect ( http://en.wikipedia.org/wiki/Expect ) ou ses alternatives.Par exemple, dans Ruby pour exécuter
sudo ls
sans obtenirsudo: no tty present and no askpass program specified
, vous pouvez exécuter ceci:[ceci utilise l'une des alternatives à l' extension Expect TCL: ruby_expect gem].
la source
Pour référence, au cas où quelqu'un d'autre rencontrerait le même problème, j'étais coincé pendant une bonne heure avec cette erreur qui ne devrait pas se produire puisque j'utilisais le paramètre NOPASSWD.
Ce que je ne savais PAS, c'est que sudo peut générer exactement le même message d'erreur lorsqu'il n'y a pas de tty et que la commande que l'utilisateur essaie de lancer ne fait pas partie de la commande autorisée dans le fichier / etc / sudoers.
Voici un exemple simplifié du contenu de mon fichier avec mon problème:
Lorsque bguser tentera de lancer "sudo command_b arg_b" sans aucun tty (bguser étant utilisé pour certains démons), il rencontrera l'erreur "no tty present and no askpass program specified".
Pourquoi?
Parce qu'il manque une virgule à la fin de la ligne dans le fichier / etc / sudoers ...
(Je me demande même s'il s'agit d'un comportement attendu et non d'un bogue dans sudo car le message d'erreur correct pour un tel cas devrait être "Désolé, l'utilisateur bguser n'est pas autorisé à s'exécuter, etc.")
la source
J'obtenais cette erreur parce que j'avais limité mon utilisateur à un seul «systemctl» exécutable et j'avais mal configuré le fichier visudo.
Voici ce que j'avais:
Cependant, vous devez inclure le chemin d'accès complet à l'exécutable, même s'il se trouve sur votre chemin par défaut, par exemple:
Cela permet à mon utilisateur jenkins de redémarrer les services mais ne pas avoir un accès root complet
la source
Personne n'a dit ce qui pouvait provoquer cette erreur, en cas de migration d'un hôte à un autre, n'oubliez pas de vérifier le nom d'hôte dans le fichier sudoers:
Voici donc ma configuration / etc / sudoers
s'il ne correspond pas
il affichera cette erreur:
la source
Autres options, non basées sur NOPASSWD:
la source
Peut-être que la question n'est pas claire: pourquoi aucune réponse ne la correspondait, mais j'ai eu le même message d'erreur lorsque j'essayais de monter sshfs, ce qui nécessitait sudo: la commande est quelque chose comme ceci:
en ajoutant l'option
-o debug
J'ai eu le même message de cette question:
Donc, en lisant les autres réponses, je suis devenu un fichier
/etc/sudoer.d/user
sur my.server.tld avec:et maintenant je peux monter le disque sans donner trop de droits supplémentaires à mon utilisateur.
la source
Bien que cette question soit ancienne, elle est toujours d'actualité pour mon système plus ou moins à jour. Après avoir activé le mode de débogage de sudo (
Debug sudo /var/log/sudo_debug all@info
in/etc/sudo.conf
), j'ai été pointé sur / dev: "/dev is world writable
". Vous devrez donc peut-être vérifier les autorisations du fichier tty , en particulier celles du répertoire dans lequel réside le nœud tty / pts.la source
1 ouvrez / etc / sudoers
type
sudo vi /etc/sudoers
. Cela ouvrira votre fichier en mode édition.2 Ajouter / modifier un utilisateur Linux
Recherchez l'entrée pour l'utilisateur Linux. Modifiez comme ci-dessous si trouvé ou ajoutez une nouvelle ligne.
3 Enregistrer et quitter le mode édition
la source
Si vous ajoutez cette ligne à votre
/etc/sudoers
(viavisudo
) cela résoudra ce problème sans avoir à désactiver la saisie de votre mot de passe et quand un alias poursudo -S
ne fonctionnera pas (appels de scriptssudo
):Bien sûr, lisez le manuel vous-même pour le comprendre, mais je pense que pour mon cas d'utilisation de l'exécution dans un conteneur LXD via
lxc exec instance -- /bin/bash
son assez sûr car il n'imprime pas le mot de passe sur un réseau.la source
Utilisation du pipeline:
En utilisant ici-document:
Ouvrez un terminal pour demander le mot de passe (celui qui fonctionne):
la source