Как да поправите 'sudo: няма наличен tty и не е зададена програма askpass' грешка?

Опитвам се да компилирам някои източници с помощта на makefile. В makefile има няколко команди, които трябва да се изпълняват като sudo.

Когато компилирам източниците от терминал, всичко върви добре и make се спира при първото изпълнение на sudo командата в очакване на парола. След като въведа паролата, make се възобновява и завършва.

Но бих искал да мога да компилирам източниците в NetBeans. Така че започнах проект и показах на Netbeans къде да намери източниците, но когато компилирам проекта, той дава грешка:

sudo: no tty present and no askpass program specified

Първият път, когато се натъква на команда sudo.

Потърсих проблема в интернет и всички решения, които намерих, сочат към едно: забрана на паролата за този потребител. Тъй като въпросният потребител тук е root. Не искам да правя това.

Има ли някакво друго решение?

Разрешаването на потребителя да използва тази команда, без да изисква парола, би трябвало да реши проблема. Първо отворете конзола с шел и въведете:

sudo visudo

След това редактирайте този файл, за да добавите в самия му край:

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

например

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

ще позволи на потребителя John да използва sudo poweroff, start и stop, без да му бъде поискана парола.

Погледнете в долната част на екрана за клавишните комбинации, които трябва да използвате във visudo - между другото, това не е vi - и при първия признак на проблем излезте, без да записвате. Предупреждение: повреждането на този файл ще има сериозни последици, редактирайте внимателно!

Коментари (8)

Опитайте:

ssh -t remotehost "sudo "

Това ще премахне горните грешки.

Коментари (5)

sudo по подразбиране ще прочете паролата от прикачения терминал. Проблемът ви е, че няма свързан терминал, когато се стартира от конзолата на netbeans. Така че трябва да използвате алтернативен начин за въвеждане на паролата: той се нарича програма askpass.

Програмата askpass не е конкретна програма, а всяка програма, която може да поиска парола. Например в моята система x11-ssh-askpass работи добре.

За да направите това, трябва да посочите коя програма да се използва, или с променливата на средата SUDO_ASKPASS, или във файла sudo.conf (вижте man sudo за подробности).

Можете да принудите sudo да използва програмата askpass, като използвате опцията -A. По подразбиране тя ще я използва само ако няма свързан терминал.

Коментари (6)