Oprava: Pseudoterminál nebude přidělen, protože stdin není terminál
Ve většině případů se vám zobrazí matoucí chyba „pseudoterminál nebude přidělen, protože stdin není terminál“, pouze když spouštíte nějaký příkaz SSH ze skriptu. Pokud spouštíte stejný příkaz z příkazového řádku, může to fungovat naprosto dobře.
Než budete pokračovat, ujistěte se, že jste přidali svůj veřejný klíč agentovi SSH, a poté zkuste znovu použít ssh. Možná vám právě chyběl klíč. Na druhou stranu, pokud to nefunguje, budete muset ve svém skriptu provést malé řešení problémů.
Metoda 1: Vynucení a zakázání přidělení pseudotýla
Existuje několik možností příkazového řádku, které by vám mohly problém rychle vyřešit. Vyzkoušejte ssh -t -t -R následované zbytkem toho, k čemu jste se pokoušeli připojit, abyste vynutili přidělení pseudoterminálu. Řekněme například, že jste se přihlásili pomocí účtu ssh -p 80 [email protected] do svého účtu na example.com, což je samozřejmě figurína pro neexistující dokumentaci.
Zkuste spustit např. ssh -t -t -R -p 80 [email protected] a zjistěte, zda to problém vyřeší. Abyste se mohli úspěšně přihlásit do systému, budete samozřejmě muset jméno nahradit svým skutečným účtem a názvem hostitele. To vynutí přidělení terminálu, takže byste neměli vidět, že pseudo-terminál nebude přidělen, protože stdin není chyba terminálu.
Na druhou stranu můžete skončit s konstantním řetězcem chybových zpráv. Někteří uživatelé poznamenali, že by to mohlo být považováno za zábavné.
Bez ohledu na to je to určitě frustrující, proto použijte Ctrl + C k ukončení procesu.
Můžete zkusit použít pouze jeden přepínač -t nebo zvýšit počet. Pokud to nefunguje, nahraďte všechny přepínače -t přepínačem -T v příkazu, např. ssh -T -R -p 80 [email protected] a zjistěte, zda to funguje.
Tato metoda úplně deaktivuje celý proces přidělování pseudo-terminálu, takže by mohla fungovat v případech, kdy to vynucení nefunguje. Samozřejmě, nic z toho by nemělo být problémem z příkazového řádku, ale nezapomeňte si poznamenat, když zjistíte, která možnost funguje ve vašem skriptu, abyste ji mohli použít v jakýchkoli budoucích skriptech, které musíte spustit pro přístup k uvedenému serveru.
Protože příkaz ssh dal těmto dvěma opačným možnostem podobná jména, pamatujte, že -t vynutí přidělení pseudoterminálů, zatímco -T jej deaktivuje. Tyto možnosti rozlišují velká a malá písmena a jsou často nutné zevnitř skriptů, protože ssh potřebuje k práci tradiční terminál TTY. Ve vašem případě přirozeně pro tento účel používáte emulátor terminálu.
Metoda 2: Použití sshpass
Někteří lidé možná zjistí, že jejich skripty fungují lépe pomocí příkazu sshpass, který ve výchozím nastavení není zahrnut. Můžete jej kdykoli nainstalovat pomocí sudo apt-get install sshpass nebo sudo yum install sshpass, pokud to chcete zkusit nebo protože to potřebujete pro konkrétní případ použití.
Pokud ji ještě nepoužíváte, pravděpodobně ji nepotřebujete. Stejné techniky však můžete použít k překvapení chybových zpráv souvisejících s přidělováním pseudoterminálů i v tomto druhu prostředí.
Například použijte sshpass -p heslo ssh -T [email protected] k vynucení fungování systému zevnitř vašeho skriptu.
Metoda 3: Oprava chyb správy úloh
Občas se může zobrazit ještě jedna chybová zpráva, a to i po vyřešení tohoto problému. Pokud se vám zobrazuje varování, že nečte přístup k tty, a pak vám připomene, že ve vašem prostředí není žádná kontrola úlohy, měli byste být schopni pracovat trochu normálně.
Tato chyba je způsobena tím, že je na vzdáleném serveru něco nepravidelného, co se týká buď csh, tcsh nebo možná i Almquist nebo jiného shellu. Možná jste si toho nevšimli, protože se vám zobrazovaly další chybové zprávy, ale za předpokladu, že nevidíte žádné další o pseudoterminálech, by mělo být možné pokračovat relativně jako obvykle.
Možná nebudete chtít v tomto případě zkusit použít Ctrl + Z k zastavení procesů, protože nemusí existovat způsob, jak je spustit znovu. Pokud se vám při ukončení zobrazuje chybová zpráva s přečtením, že jsou zastavené úlohy, nebudete se moci odhlásit.
Pomocí příkazů ps a kill zavřete všechny úlohy, které nemůžete zavřít, za předpokladu, že vám nevadí ztráta práce v tomto procesu. Nyní budete moci odejít.
Štítky Linux how-to ssh