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:

sudo visudo

Poté upravte tento soubor a přidejte jej na samý konec:

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

např.

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

umožní uživateli john používat sudo poweroff, start a stop 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ě!

Komentáře (8)

Vyzkoušejte:

ssh -t remotehost "sudo "

Tím odstraníte výše uvedené chyby.

Komentáře (5)

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 souboru sudo.conf (podrobnosti viz man sudo).

Pomocí volby -A můžete vynutit, aby sudo používalo program askpass. Ve výchozím nastavení jej použije pouze v případě, že není připojen terminál.

Komentáře (6)