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



Опитайте Нашия Инструмент За Премахване На Проблемите

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



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



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

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



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

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

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



псевдо-терминал

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

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

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

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

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

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

Например използвайте sshpass -p парола ssh -T appuals@ssh.example.com, за да принудите системата да работи от вътрешната страна на вашия скрипт.

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

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

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

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

спрени работни места

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

Етикети Linux как да ssh 3 минути четене