Jag försöker kompilera några källor med hjälp av en makefile. I makefilen finns det ett antal kommandon som måste köras som sudo
.
När jag kompilerar källorna från en terminal går allt bra och make pausas första gången ett sudo
-kommando körs och väntar på lösenord. När jag skriver in lösenordet återupptas make och avslutas.
Men jag skulle vilja kunna kompilera källorna i NetBeans. Så jag startade ett projekt och visade Netbeans var källorna finns, men när jag kompilerar projektet ger det felet:
sudo: no tty present and no askpass program specified
Första gången den träffar ett sudo
-kommando.
Jag har letat upp problemet på internet och alla lösningar jag hittat pekar på en sak: att inaktivera lösenordet för den här användaren. Eftersom användaren i fråga här är root. Jag vill inte göra det.
Finns det någon annan lösning?
Om du ger användaren rätt att använda kommandot utan att fråga efter lösenordet bör problemet lösas. Öppna först en skalkonsol och skriv:
sudo visudo
Redigera sedan filen och lägg till i slutet:
username ALL = NOPASSWD: /fullpath/to/command, /fullpath/to/othercommand
t.ex.
john ALL = NOPASSWD: /sbin/poweroff, /sbin/start, /sbin/stop
tillåter användaren john
att sudo poweroff
, start
och stop
utan att bli tillfrågad om lösenord.
Titta längst ner på skärmen för att se vilka tangenttryckningar du måste använda i visudo - detta är förresten inte vi - och avsluta utan att spara vid första tecknet på något problem. Hälsovarning: att korrumpera denna fil kommer att få allvarliga konsekvenser, redigera med försiktighet!
Försök:
ssh -t remotehost "sudo <cmd>"
Detta tar bort ovanstående fel.
sudo
läser som standard lösenordet från den anslutna terminalen. Ditt problem är att det inte finns någon terminal ansluten när det körs från Netbeans-konsolen. Så du måste använda ett alternativt sätt att skriva in lösenordet: det kallas askpass-programmet.
Programmet askpass är inte ett särskilt program, utan alla program som kan be om ett lösenord. I mitt system fungerar till exempel x11-ssh-askpass
bra.
För att göra det måste du ange vilket program som ska användas, antingen med miljövariabeln SUDO_ASKPASS
eller i filen sudo.conf
(se man sudo
för mer information).
Du kan tvinga sudo
att använda programmet askpass genom att använda alternativet -A
. Som standard kommer det bara att använda det om det inte finns en ansluten terminal.