Fix: Pseudo-terminal tilldelas inte eftersom stdin inte är en terminal



Prova Vårt Instrument För Att Eliminera Problem

I de flesta fall får du en förvirrande 'pseudo-terminal kommer inte att tilldelas eftersom stdin inte är en terminal' -fel bara när du kör någon form av SSH-kommando från ett skript. Om du kör samma kommando från kommandoraden kan det fungera helt bra.



Innan du går vidare, se till att du har lagt till din offentliga nyckel till SSH-agenten och försök sedan använda ssh igen. Du kanske bara saknat en nyckel. Å andra sidan, om detta inte fungerar måste du göra en liten felsökning i ditt skript.



Metod 1: Tvinga och inaktivera pseudo-tty-allokering

Det finns ett par kommandoradsalternativ som snabbt kan lösa problemet åt dig. Försök med ssh -t -t -R följt av resten av det du försökte ansluta till för att tvinga till pseudo-terminalallokering. Låt oss till exempel säga att du skulle använda ssh -p 80 appuals@ssh.example.com för att logga in på ditt konto på example.com, vilket naturligtvis är en dummy för dokumentation som inte finns.



Försök att springa t.ex. ssh -t -t -R -p 80 appuals@ssh.example.com och se om detta löser problemet. Du måste naturligtvis ersätta namnet med ditt faktiska konto och värdnamn för att kunna logga in på systemet. Detta tvingar tilldelningen av en terminal, så du bör inte se att pseudoterminalen inte kommer att tilldelas eftersom stdin inte är ett terminalfel.

Å andra sidan kan du bara sluta med en konstant rad felmeddelanden. Vissa användare har påpekat att detta kan anses vara underhållande.

Det är verkligen frustrerande oavsett, så använd Ctrl + C för att döda processen.



pseudo-terminal

Du kan försöka antingen bara använda en -t-omkopplare eller öka antalet. Om detta inte fungerar byter du ut alla -t-omkopplare med en -T-omkopplare i kommandot, t.ex. ssh -T -R -p 80 appuals@ssh.example.com och se om det fungerar.

Den här metoden inaktiverar hela pseudoterminalallokeringsprocessen helt, så det kan fungera i fall där det inte tvingas. Naturligtvis bör inget av detta vara ett problem från kommandoraden, men se till att göra en anteckning när du hittar vilket alternativ som fungerar från ditt skript så att du kan använda det i framtida skript du måste köra för att komma åt nämnda server.

Eftersom ssh-kommandot gav dessa två motsatta alternativ liknande namn, kom ihåg att -t tvingar tilldelning av pseudo-terminaler medan -T inaktiverar det. Dessa alternativ är skiftlägeskänsliga och de är ofta nödvändiga inifrån skript eftersom ssh behöver en traditionell TTY-terminal för att fungera. I ditt fall skulle du naturligtvis använda din terminalemulator för detta ändamål.

Metod 2: Använda sshpass

Vissa människor kanske tycker att deras skript fungerar bättre med kommandot sshpass, som inte ingår som standard. Du kan alltid installera det med sudo apt-get install sshpass eller sudo yum install sshpass om du föredrar att prova eller för att du behöver det för ditt specifika användningsfall.

Om du inte redan använder det behöver du förmodligen inte det. Ändå kan du använda samma tekniker för att överraska felmeddelanden relaterade till pseudo-terminalallokering också i denna typ av miljö.

Använd till exempel sshpass -p lösenord ssh -T appuals@ssh.example.com för att tvinga systemet att arbeta inifrån ditt skript.

Metod 3: Åtgärda jobbhanteringsfel

Ibland kan du få ett annat felmeddelande även efter att ha åtgärdat allt detta. Om du får en varning som läser ingen åtkomst till tty och du påminns om att det inte finns någon jobbkontroll i ditt skal ska du kunna arbeta något normalt.

Detta fel orsakas av att något är oregelbundet på fjärrservern relaterat till antingen csh, tcsh eller möjligen till och med Almquist eller annat skal. Du kanske inte har märkt det för att du fick andra felmeddelanden, men förutsatt att du inte ser några andra om pseudo-terminaler bör det vara möjligt att fortsätta relativt som du brukar göra.

Du kanske inte vill försöka använda Ctrl + Z i det här fallet för att stoppa processer, eftersom det kanske inte finns något sätt att få dem att starta om igen. Om du får ett felmeddelande om att det finns stoppade jobb när du avslutar får du inte logga ut.

stoppade jobb

Använd kommandona ps och kill för att stänga jobb du inte kan stänga, förutsatt att du inte har något emot att förlora arbete i processen. Du kan gå ut nu.

Taggar Linux-instruktioner ssh 3 minuter läst