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!
Spróbuj:
ssh -t remotehost "sudo <cmd>"
Spowoduje to usunięcie powyższych błędów.
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.