Поправка: Псевдо-терминалът няма да бъде разпределен, защото stdin не е терминал

В повечето случаи ще получите объркваща грешка „псевдо-терминалът няма да бъде разпределен, защото stdin не е терминал“ само когато изпълнявате някаква SSH команда от скрипт. Ако изпълнявате същата команда от командния ред, тя може да работи напълно добре.

Преди да продължите по-нататък, уверете се, че сте добавили публичния си ключ към SSH агента и след това опитайте да използвате ssh отново. Може би току-що сте пропуснали ключ. От друга страна, ако това не работи, ще трябва да направите малко отстраняване на неизправности във вашия скрипт.

Метод 1: Принуждаване и деактивиране на псевдо-tty разпределение

Има двойка опции на командния ред, които може да решат проблема бързо вместо вас. Опитайте ssh -t -t -R, последвано от останалата част от това, в което се опитвате да се свържете, за да принудите псевдо-терминално разпределение. Да предположим например, че ще използвате ssh -p 80 [email protected], за да влезете в акаунта си на example.com, което разбира се е фиктив за документация, която не съществува.

Опитайте да стартирате например ssh -t -t -R -p 80 [email protected] и проверете дали това решава проблема. Разбира се, ще трябва да замените името с вашия действителен акаунт и име на хост, за да влезете успешно в системата. Това налага разпределението на терминал, така че не бива да виждате, че псевдо-терминалът няма да бъде разпределен, защото stdin не е грешка на терминала.

От друга страна, може просто да се окажете с постоянен низ от съобщения за грешки. Някои потребители отбелязват, че това може да бъде сметнато за забавно.

Със сигурност е разочароващо, независимо от това, така че използвайте Ctrl + C, за да убиете процеса.

Можете да опитате или да използвате само един -t превключвател, или да увеличите броя. Ако това не работи, заменете превключвателите -t с -T превключвател в командата, например ssh -T -R -p 80 [email protected] и вижте дали това работи.

Този метод деактивира изцяло целия процес на разпределение на псевдо-терминал, така че може да работи в случаите, когато принуждаването не го прави. Разбира се, нищо от това не би трябвало да е проблем от командния ред, но не забравяйте да направите бележка, когато откриете коя опция работи от вашия скрипт, за да можете да я използвате във всички бъдещи скриптове, които трябва да изпълните за достъп до споменатия сървър.

Тъй като командата ssh даде на тези две противоположни опции подобни имена, не забравяйте, че -t принуждава разпределението на псевдо-терминали, докато -T го деактивира. Тези опции са чувствителни към малки и големи букви и често са необходими от скриптове, защото ssh се нуждае от традиционен TTY терминал, за да работи. Естествено, във вашия случай бихте използвали вашия терминален емулатор за тази цел.

Метод 2: Използване на sshpass

Някои хора може да открият, че техните скриптове работят по-добре с командата sshpass, която не е включена по подразбиране. Винаги можете да го инсталирате със sudo apt-get install sshpass или sudo yum install sshpass, ако предпочитате да опитате или защото ви е необходим за конкретния ви случай на употреба.

Ако вече не го използвате, вероятно нямате нужда от него. Независимо от това, можете да използвате същите техники, за да изненадате съобщения за грешки, свързани с псевдо-терминално разпределение и в този вид среда.

Например използвайте sshpass -p парола ssh -T [email protected], за да принудите системата да работи от вътрешната страна на вашия скрипт.

Метод 3: Поправяне на грешки при управление на задания

Понякога може да получите още едно съобщение за грешка, дори след като коригирате всичко това. Ако получавате предупреждение, в което се чете липса на достъп до tty и след това ви се напомня, че в черупката ви няма контрол на работата, трябва да можете да работите донякъде нормално.

Тази грешка е причинена от нещо нередовно на отдалечения сървър, свързано или с csh, tcsh или дори с Almquist или друга обвивка. Може да не сте го забелязали, защото сте получавали други съобщения за грешка, но при условие, че не виждате други за псевдо-терминалите, би трябвало да е възможно да продължите относително както обикновено.

В този случай може да не искате да опитате да използвате Ctrl + Z, за да спрете процесите, защото може да няма начин те да бъдат стартирани отново. Ако получавате съобщение за грешка, което гласи, че има спрени задачи, когато излезете, няма да имате право да излезете.

Използвайте командите ps и kill, за да затворите всички задачи, които не можете да затворите, ако приемете, че нямате нищо против да загубите работа в процеса. Ще можете да излезете сега.

Етикети Linux как да ssh