Ik probeer wat broncode te compileren met behulp van een makefile. In de makefile staat een aantal commando's die als sudo
moeten worden uitgevoerd.
Wanneer ik de broncode vanaf een terminal compileer, gaat alles goed en wordt make gepauzeerd wanneer een sudo
commando voor de eerste keer wordt uitgevoerd, wachtend op een wachtwoord. Zodra ik het wachtwoord intyp, wordt make hervat en voltooid.
Maar ik zou graag de broncode in NetBeans willen kunnen compileren. Dus, ik heb een project gestart en netbeans laten zien waar ik de broncode kan vinden, maar als ik het project compileer geeft het de foutmelding:
sudo: no tty present and no askpass program specified
De eerste keer dat het een sudo
commando raakt.
Ik heb het probleem opgezocht op het internet en alle oplossingen die ik heb gevonden wijzen naar één ding: het uitschakelen van het wachtwoord voor deze gebruiker. Aangezien de gebruiker in kwestie hier root is. Ik wil dat niet doen.
Is er een andere oplossing?
De gebruiker toestemming geven om dat commando te gebruiken zonder om een wachtwoord te vragen zou het probleem moeten oplossen. Open eerst een shell console en type:
sudo visudo
Bewerk dan dat bestand en voeg helemaal aan het einde toe:
username ALL = NOPASSWD: /fullpath/to/command, /fullpath/to/othercommand
bv
john ALL = NOPASSWD: /sbin/poweroff, /sbin/start, /sbin/stop
zal de gebruiker john
sudo poweroff
, start
en stop
toestaan zonder dat hij om een wachtwoord gevraagd wordt.
Kijk onderaan het scherm voor de toetsaanslagen die je moet gebruiken in visudo - dit is trouwens geen vi - en sluit af zonder op te slaan bij het eerste teken van een probleem. Gezondheidswaarschuwing: het corrumperen van dit bestand zal ernstige gevolgen hebben, bewerk het met zorg!
Probeer het:
ssh -t remotehost "sudo <cmd>"
Dit zal de bovenstaande fouten verwijderen.
sudo
leest standaard het wachtwoord uit de aangesloten terminal. Uw probleem is dat er geen terminal is aangesloten wanneer het wordt uitgevoerd vanaf de netbeans console. Je moet dus een alternatieve manier gebruiken om het wachtwoord in te voeren: dat heet het programma askpass.
Het askpass programma is niet een bepaald programma, maar elk programma dat om een wachtwoord kan vragen. In mijn systeem werkt bijvoorbeeld x11-ssh-askpass
prima.
Om dat te doen moet je opgeven welk programma gebruikt moet worden, ofwel met de omgevingsvariabele SUDO_ASKPASS
of in het sudo.conf
bestand (zie man sudo
voor details).
Je kan sudo
dwingen om het askpass programma te gebruiken door de optie -A
te gebruiken. Standaard zal het alleen gebruikt worden als er geen terminal is aangesloten.