Fix: Pseudo-terminal vil ikke bli tildelt fordi stdin ikke er en terminal

I de fleste tilfeller vil du motta en forvirrende "pseudo-terminal vil ikke bli tildelt fordi stdin ikke er en terminal" -feil bare når du kjører en slags SSH-kommando fra et skript. Hvis du kjører den samme kommandoen fra kommandolinjen, kan det fungere helt greit.

Før du går videre, må du sørge for at du har lagt til den offentlige nøkkelen til SSH-agenten, og deretter prøve å bruke ssh igjen. Du har kanskje akkurat savnet en nøkkel. På den annen side, hvis dette ikke fungerer, må du gjøre en liten feilsøking i skriptet.

Metode 1: Tvinge og deaktivere pseudo-tty-tildeling

Det er et par kommandolinjealternativer som kan løse problemet raskt for deg. Prøv ssh -t -t -R etterfulgt av resten av det du prøvde å koble til for å tvinge til pseudo-terminal tildeling. La oss for eksempel si at du skulle bruke ssh -p 80 [email protected] til å logge inn på kontoen din på example.com, som selvfølgelig er en dummy for dokumentasjon som ikke eksisterer.

Prøv å løpe f.eks. ssh -t -t -R -p 80 [email protected] og se om dette løser problemet. Du må selvfølgelig erstatte navnet med den faktiske kontoen og vertsnavnet ditt for å kunne logge deg på systemet. Dette tvinger tildelingen av en terminal, så du bør ikke se at pseudo-terminalen ikke blir tildelt fordi stdin ikke er en terminalfeil.

På den annen side kan du bare ende opp med en konstant streng feilmeldinger. Noen brukere har bemerket at dette kan bli ansett som morsomt.

Det er absolutt frustrerende, uansett, så bruk Ctrl + C for å drepe prosessen.

Du kan prøve å bruke bare en -t-bryter eller øke antallet. Hvis dette ikke fungerer, bytt ut eventuelle -t-brytere med en -T-bryter i kommandoen, f.eks. ssh -T -R -p 80 [email protected] og se om det fungerer.

Denne metoden deaktiverer hele den pseudo-terminale tildelingsprosessen helt, så den kan fungere i tilfeller der det ikke tvinges. Selvfølgelig bør ikke noe av dette være et problem fra kommandolinjen, men husk å notere når du finner hvilket alternativ som fungerer fra skriptet ditt, slik at du kan bruke det i fremtidige skript du må kjøre for å få tilgang til nevnte server.

Siden ssh-kommandoen ga disse to motsatte alternativene lignende navn, husk at -t tvinger tildelingen av pseudo-terminaler mens -T deaktiverer den. Disse alternativene er store og små bokstaver, og de er ofte nødvendige fra innsiden av skriptene, fordi ssh trenger en tradisjonell TTY-terminal for å fungere. I ditt tilfelle vil du naturligvis bruke terminalemulatoren til dette formålet.

Metode 2: Bruke sshpass

Noen mennesker kan oppleve at skriptene deres fungerer bedre med sshpass-kommandoen, som ikke er inkludert som standard. Du kan alltid installere den med sudo apt-get install sshpass eller sudo yum install sshpass hvis du foretrekker å prøve, eller fordi du trenger det for din spesifikke brukssak.

Hvis du ikke allerede bruker det, trenger du sannsynligvis ikke det. Likevel kan du bruke de samme teknikkene for å overraske feilmeldinger relatert til pseudo-terminalallokering også i denne typen miljø.

Bruk for eksempel sshpass -p passord ssh -T [email protected] for å tvinge systemet til å fungere fra innsiden av skriptet.

Metode 3: Å fikse jobbadministrasjonsfeil

Noen ganger kan du få en annen feilmelding, selv etter å ha løst alt dette. Hvis du mottar en advarsel som ikke gir tilgang til tty, og du blir påminnet om at det ikke er noen jobbkontroll i skallet ditt, bør du kunne jobbe noe normalt.

Denne feilen er forårsaket av at noe er uregelmessig på den eksterne serveren relatert til enten csh, tcsh eller muligens til og med Almquist eller annet skall. Du har kanskje ikke lagt merke til det fordi du fikk andre feilmeldinger, men forutsatt at du ikke ser noen andre om pseudo-terminaler, bør det være mulig å fortsette relativt slik du vanligvis ville gjort.

Du vil kanskje ikke prøve å bruke Ctrl + Z i dette tilfellet for å stoppe prosesser, fordi det kanskje ikke er noen måte å få dem i gang igjen. Hvis du får en feilmelding om at det er stoppede jobber når du avslutter, får du ikke lov til å logge av.

Bruk kommandoer ps og kill for å lukke jobber du ikke kan stenge, forutsatt at du ikke har noe imot å miste arbeid i prosessen. Du kan gå ut nå.

Merker hvordan Linux ssh