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ě!
Vyzkoušejte:
ssh -t remotehost "sudo <cmd>"
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 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.