J'essaie de compiler des sources en utilisant un makefile. Dans le fichier 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 le make est mis en pause la première fois qu'une commande sudo
est exécutée en attendant le mot de passe. Une fois que j'ai tapé le mot de passe, make reprend et se termine.
Mais j'aimerais pouvoir compiler les sources dans NetBeans. J'ai donc lancé 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 commande sudo
.
J'ai cherché le problème sur internet et toutes les solutions que j'ai trouvées pointent vers une seule chose : désactiver le mot de passe pour cet utilisateur. Puisque l'utilisateur en question ici est root. Je ne veux pas faire cela.
Existe-t-il une autre solution ?
Autoriser l'utilisateur à utiliser cette commande sans demander de mot de passe devrait résoudre le problème. Ouvrez d'abord une console shell et tapez :
sudo visudo
Puis éditez ce fichier pour ajouter à la toute fin :
username ALL = NOPASSWD: /fullpath/to/command, /fullpath/to/othercommand
par exemple
john ALL = NOPASSWD: /sbin/poweroff, /sbin/start, /sbin/stop
permettra à l'utilisateur john
de sudo poweroff
, start
et stop
sans être invité à entrer un mot de passe.
Regardez en bas de l'écran les touches que vous devez utiliser dans visudo - ce n'est pas vi d'ailleurs - et quittez sans sauvegarder au premier signe de problème. Avertissement : corrompre ce fichier aura de graves conséquences, modifiez-le avec précaution !
Essayez :
ssh -t remotehost "sudo <cmd>"
Cela supprimera les erreurs ci-dessus.
Par défaut, sudo
lira le mot de passe à partir du terminal attaché. Votre problème est qu'il n'y a pas de terminal attaché quand il est lancé depuis la console Netbeans. Vous devez donc utiliser une autre méthode pour entrer le mot de passe : c'est le programme askpass.
Le programme askpass n'est pas un programme particulier, mais tout programme qui peut demander un mot de passe. Par exemple, dans mon système, x11-ssh-askpass
fonctionne bien.
Pour cela, vous devez spécifier quel programme utiliser, soit avec la variable d'environnement SUDO_ASKPASS
, soit dans le fichier sudo.conf
(voir man 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 si un terminal n'est pas attaché.