Opraveno: sudo: není přítomen žádný tty a není zadán žádný program askpass

Výstupní řádek zadaný bez tty a bez programu askpass je jednou z těch chybových zpráv ssh, která opravdu není tak užitečná, protože ve skutečnosti nedosahuje bodu, který způsobuje problém. Je více než pravděpodobné, že ve skutečnosti pracujete s platným typem TTY nějakého druhu, když uvidíte zprávu a pravděpodobně jste se zabývali zadáním hesla sudo přes ssh v pohodě. Je více než pravděpodobné, že máte na starosti syntaktickou chybu, ale zpráva tuto skutečnost přímo neřeší.

Jelikož se jedná o problém spojený se samotným ssh, je více než pravděpodobné, že budete moci problém reprodukovat v systémech Linux, FreeBSD, macOS a Cygwin Unix v systému Microsoft Windows. Naštěstí by oprava měla být na všech těchto platformách téměř stejná.

Metoda 1: Hledání terminálu pro ssh

I když je více než pravděpodobné, že již pracujete z terminálu, ssh si to pravděpodobně neuvědomuje. Možná se stále pokoušíte vyhledat emulátor terminálu TTY, přestože jste uvnitř okna příkazového řádku. Zkuste chybu otestovat a otestovat. Nakonfigurovali jsme virtuální stroj, aby sloužil jako příklad, a spustili jsme ssh už[email protected] 'sudo /var/mail/startup.sh' jako test. Přirozeně budete chtít změnit příkaz a řádek ssh na něco, co odpovídá tomu, co se snažíte udělat.

Budete se chtít ujistit, že se přihlašujete na server, o kterém jste si mysleli, že jste. Bez ohledu na to zkontrolujte, zda stále dostáváte chybovou zprávu sudo: no tty present a no askpass program specified. Je více než pravděpodobné, že pokud jej stále dostáváte, uvidíte jej třikrát a možná budete dokonce vyzváni k zadání hesla stejným způsobem, jako kdybyste lokálně spouštěli sudo na Debianu nebo Ubuntu.

Zkuste přidat -t po ssh a opravte chybu syntaxe. Devětkrát z deseti to přinutí ssh, aby si přidělil virtuální TTY a předstíral, že to běží uvnitř skutečného terminálu. Na svém příkazu nemusíte nic měnit. Jednoduše přidejte volbu -t za písmena ssh a poté ponechejte hostitele a předaný příkaz stejný. Toto budete také chtít mít na paměti, pokud budete někdy muset spustit ssh v druhé části vašeho příkazu.

Například pokud jste při spuštění příkazu, který byl naformátován jako, dostávali stejný druh chyby ssh -t už[email protected] „ssh už[email protected] budete muset ponechat volbu -t po prvním ssh, abyste tomu zabránili. Všimněte si, že pokud jste později změnili druhý příkaz buď na produkci, nebo na spotřebu dat, pak byste vůbec nechtěli použít -t. Například pokud jste místo skriptu začali spouštět kočku, můžete vypustit -t, protože k tomu nebudete muset přidělit terminál.

Metoda 2: Oprava souboru visudo

Můžete také mít problém s konfigurací, který způsobí tuto chybu. Upravte soubor visudo vydáním sudo visudo příkaz a mějte na paměti, že tento soubor nikdy nebudete chtít upravovat jiným způsobem. Měli byste najít řádek, který v něm obsahuje ALL = NOPASSWD, následovaný typy příkazů, pro jejichž spuštění není nutné zadávat heslo správce.

Každý jednotlivý příkaz musí končit čárkou, kromě posledního na řádku. Takže pokud jste měli něco, co čte jako / sbin / poweroff / sbin / start / sbin / stop, bude to všechno považovat za jediný příkaz a hodit na vás chybu. Podobně, pokud vám chybí příkaz, který se pokoušíte spustit pomocí ssh, zobrazí se také tato chyba. Před kontrolou, zda je chyba stále reprodukovatelná, proveďte nezbytná nastavení a uložte soubor.

Pokud chyba přetrvává i po provedení restartování služby, zkustenásledující příkaz na obrázku níže a ujistěte se, že řádek PermitTTY obsahuje slovo ano. Pokud se jedná o poslední řádek ve vašem souboru, ujistěte se, že je poté prázdný nový řádek. GNU nano provádí tento úkol automaticky ve výchozím nastavení.

Než se pokusíte chybovou zprávu znovu reprodukovat, budete muset restartovat všechny příslušné služby.