Jak opravit chybu 'sudo: no tty present and no askpass program specified'?
Snažím se zkompilovat některé zdrojové kódy pomocí souboru makefile. V souboru makefile je několik příkazů, které je třeba spustit jako sudo
.
Když zkompiluju zdrojové kódy z terminálu, vše proběhne v pořádku a make se při prvním spuštění příkazu sudo
pozastaví a čeká na heslo. Jakmile zadám heslo, make pokračuje a dokončí se.
Chtěl bych však mít možnost zkompilovat zdrojové kódy v NetBeans. Spustil jsem tedy projekt a ukázal NetBeans, kde mám najít zdrojové kódy, ale když projekt zkompiluju, vyhodí to chybu:
sudo: no tty present and no askpass program specified
Poprvé to narazí na příkaz sudo
.
Hledal jsem tento problém na internetu a všechna řešení, která jsem našel, ukazují na jednu věc: zakázání hesla pro tohoto uživatele. Jelikož se zde jedná o uživatele root. Nechci to udělat.
Existuje nějaké jiné řešení?
Problém by mělo vyřešit povolení uživatele používat tento příkaz bez dotazu na heslo. Nejprve otevřete konzolu shellu a zadejte:
Poté upravte tento soubor a přidejte jej na samý konec:
např.
umožní uživateli
john
používat sudopoweroff
,start
astop
bez dotazu na heslo.Podívejte se na spodní část obrazovky, kde jsou uvedeny klávesové zkratky, které je třeba použít v programu visudo - mimochodem, nejedná se o vi - a při prvním náznaku jakéhokoli problému ukončete program bez uložení. Zdravotní varování: poškození tohoto souboru bude mít vážné následky, upravujte opatrně!
Vyzkoušejte:
Tím odstraníte výše uvedené chyby.
sudo
ve výchozím nastavení načte heslo z připojeného terminálu. Váš problém spočívá v tom, že při spuštění z konzoly netbeans není připojen žádný terminál. Musíte tedy použít alternativní způsob zadávání hesla: ten se nazývá program askpass.Program askpass není konkrétní program, ale jakýkoli program, který se může zeptat na heslo. Například v mém systému
x11-ssh-askpass
funguje bez problémů.Abyste to mohli udělat, musíte určit, jaký program se má použít, buď pomocí proměnné prostředí
SUDO_ASKPASS
, nebo v souborusudo.conf
(podrobnosti vizman sudo
).Pomocí volby
-A
můžete vynutit, abysudo
používalo program askpass. Ve výchozím nastavení jej použije pouze v případě, že není připojen terminál.