Oprava: Pseudoterminál nebude pridelený, pretože stdin nie je terminál
Vo väčšine prípadov sa mätúce chybové hlásenie „pseudo-terminál nebude alokovaný, pretože stdin nie je terminál“ zobrazí iba vtedy, keď spustíte nejaký príkaz SSH zo skriptu. Ak spúšťate ten istý príkaz z príkazového riadku, môže to fungovať úplne dobre.
Než pôjdete ďalej, uistite sa, že ste pridali svoj verejný kľúč k agentovi SSH, a potom skúste znova použiť ssh. Možno vám práve chýbal kľúč. Na druhej strane, ak to nefunguje, budete musieť v skripte urobiť nejaké riešenie problémov.
Metóda 1: Vynútenie a zakázanie prideľovania pseudotypov
Existuje niekoľko možností príkazového riadku, ktoré by vám mohli problém rýchlo vyriešiť. Vyskúšajte ssh -t -t -R a za ním zvyšok toho, čo ste sa pokúšali pripojiť, aby ste vynútili alokáciu pseudo-terminálu. Povedzme napríklad, že ste sa na prihlásenie do svojho účtu na stránke example.com chystali použiť ssh -p 80 [email protected], čo je samozrejme figurína pre neexistujúcu dokumentáciu.
Skúste bežať napr. ssh -t -t -R -p 80 [email protected] a zistite, či sa tým problém vyrieši. Aby ste sa mohli úspešne prihlásiť do systému, budete musieť meno nahradiť svojim skutočným účtom a menom hostiteľa. Toto vynúti pridelenie terminálu, takže by ste nemali vidieť, že pseudo-terminál nebude pridelený, pretože stdin nie je chybou terminálu.
Na druhej strane môžete skončiť s neustálym reťazcom chybových správ. Niektorí používatelia poznamenali, že by sa to mohlo považovať za zábavné.
Bez ohľadu na to je to určite frustrujúce, takže na ukončenie procesu použite Ctrl + C.
Môžete to skúsiť buď pomocou jedného prepínača -t, alebo zvýšiť počet. Ak to nefunguje, nahraďte ľubovoľné prepínače -t prepínačom -T v príkaze, napr. ssh -T -R -p 80 [email protected] a skontrolujte, či to funguje.
Táto metóda úplne zakáže celý proces prideľovania pseudo-terminálov, takže môže fungovať v prípadoch, keď to vynútenie nie. Samozrejme, nič z toho by nemal byť problémom z príkazového riadku, ale nezabudnite si všimnúť, keď zistíte, ktorá možnosť funguje z vášho skriptu, aby ste ju mohli použiť v akýchkoľvek budúcich skriptoch, ktoré musíte spustiť, aby ste sa dostali na uvedený server.
Pretože príkaz ssh dal týmto dvom protikladným možnostiam podobné názvy, nezabudnite, že -t vynúti pridelenie pseudoterminálov, zatiaľ čo -T ho zakáže. V týchto možnostiach sa rozlišujú veľké a malé písmená a sú často potrebné vo vnútri skriptov, pretože ssh na prácu potrebuje tradičný terminál TTY. Prirodzene, vo vašom prípade by ste na tento účel používali emulátor terminálu.
Metóda 2: Používanie sshpass
Niektorí ľudia môžu zistiť, že ich skripty fungujú lepšie pomocou príkazu sshpass, ktorý v predvolenom nastavení nie je zahrnutý. Môžete ho kedykoľvek nainštalovať pomocou sudo apt-get install sshpass alebo sudo yum install sshpass, ak to chcete vyskúšať, alebo pretože to potrebujete pre konkrétny prípad použitia.
Ak ho ešte nepoužívate, pravdepodobne ho nepotrebujete. Rovnaké techniky však môžete použiť na prekvapenie chybových správ týkajúcich sa alokovania pseudoterminálu aj v tomto druhu prostredia.
Napríklad pomocou sshpass -p heslo ssh -T [email protected] prinútite systém pracovať z vnútra vášho skriptu.
Metóda 3: Oprava chýb správy úloh
Príležitostne sa môže zobraziť jedno ďalšie chybové hlásenie aj po vyriešení tohto problému. Ak dostanete varovanie, že nečíta prístup k tty, a potom vám pripomenie, že vo vašom shelle nie je žiadna kontrola úloh, mali by ste byť schopní pracovať trochu normálne.
Táto chyba je spôsobená tým, že na vzdialenom serveri je niečo nepravidelné a súvisí to buď s csh, tcsh alebo dokonca s Almquistom alebo iným shellom. Možno ste si to nevšimli, pretože ste dostávali ďalšie chybové správy, ale za predpokladu, že nevidíte žiadne ďalšie o pseudotermináloch, by malo byť možné pokračovať relatívne tak, ako to zvyčajne býva.
Možno však nebudete chcieť v tomto prípade vyskúšať Ctrl + Z na zastavenie procesov, pretože nemusí existovať spôsob, ako ich znova spustiť. Ak sa vám pri ukončení zobrazuje chybové hlásenie s informáciou, že sú zastavené úlohy, nebudete sa môcť odhlásiť.
Pomocou príkazov ps a kill zatvorte všetky úlohy, ktoré nemôžete zavrieť, za predpokladu, že vám nevadí strata práce v tomto procese. Teraz budete môcť odísť.
Štítky Linux how-to ssh