Jak naprawić błąd 'sudo: no tty present and no askpass program specified'?

Próbuję skompilować niektóre źródła używając pliku makefile. W pliku makefile jest kilka komend, które muszą być uruchamiane jako sudo.

Kiedy kompiluję źródła z terminala wszystko idzie dobrze i make jest wstrzymane za pierwszym razem, kiedy komenda sudo jest uruchamiana czekając na hasło. Po wpisaniu hasła, make wznawia i kończy.

Ale chciałbym móc skompilować źródła w NetBeans. Tak więc, rozpocząłem projekt i pokazałem netbeans gdzie znaleźć źródła, ale kiedy kompiluję projekt, daje błąd:

sudo: no tty present and no askpass program specified

Za pierwszym razem trafia w polecenie sudo.

Sprawdziłem ten problem w Internecie i wszystkie rozwiązania, które znalazłem, wskazują na jedną rzecz: wyłączenie hasła dla tego użytkownika. Ponieważ użytkownik, o którym tu mowa, to root. Nie chcę tego robić.

Czy istnieje jakieś inne rozwiązanie?

Zezwolenie użytkownikowi na użycie tego polecenia bez pytania o hasło powinno rozwiązać problem. Najpierw otwórz konsolę powłoki i wpisz:

sudo visudo

Następnie edytuj ten plik, aby dodać na samym końcu:

username ALL = NOPASSWD: /fullpath/to/command, /fullpath/to/othercommand

np.

john ALL = NOPASSWD: /sbin/poweroff, /sbin/start, /sbin/stop

pozwoli użytkownikowi john na sudo poweroff, start i stop bez pytania o hasło.

Spójrz na dole ekranu na naciśnięcia klawiszy, których musisz użyć w visudo - to nie jest vi przy okazji - i wyjdź bez zapisywania przy pierwszych oznakach problemów. Ostrzeżenie zdrowotne: uszkodzenie tego pliku będzie miało poważne konsekwencje, edytuj ostrożnie!

Komentarze (8)

Spróbuj:

ssh -t remotehost "sudo "

Spowoduje to usunięcie powyższych błędów.

Komentarze (5)

sudo domyślnie odczyta hasło z dołączonego terminala. Twój problem polega na tym, że nie ma dołączonego terminala, gdy jest uruchamiany z konsoli netbeans. Musisz więc użyć alternatywnego sposobu na wprowadzenie hasła: jest to program askpass.

Program askpass nie jest konkretnym programem, ale każdym programem, który może poprosić o hasło. Na przykład w moim systemie x11-ssh-askpass działa dobrze.

Aby to zrobić musisz określić jaki program ma być użyty, albo za pomocą zmiennej środowiskowej SUDO_ASKPASS albo w pliku sudo.conf (zobacz man sudo po szczegóły).

Możesz zmusić sudo do użycia programu askpass używając opcji -A. Domyślnie będzie go używał tylko jeśli nie ma podłączonego terminala.

Komentarze (6)