Fix: Pseudo-terminal tildeles ikke, fordi stdin ikke er en terminal



Prøv Vores Instrument Til At Fjerne Problemer

I de fleste tilfælde modtager du en forvirrende “pseudo-terminal tildeles ikke, fordi stdin ikke er en terminal” -fejl kun, når du kører en slags SSH-kommando fra et script. Hvis du kører den samme kommando fra kommandolinjen, fungerer den muligvis helt fint.



Før du går videre, skal du sikre dig, at du har føjet din offentlige nøgle til SSH-agenten, og prøv derefter at bruge ssh igen. Du har måske lige manglet en nøgle. På den anden side, hvis dette ikke virker, skal du lave en lille fejlfinding i dit script.



Metode 1: Tvinger og deaktiverer pseudo-tty-tildeling

Der er et par kommandolinjemuligheder, der måske løser problemet hurtigt for dig. Prøv ssh -t -t -R efterfulgt af resten af ​​det, du forsøgte at oprette forbindelse til for at tvinge pseudo-terminal tildeling. Lad os for eksempel sige, at du skulle bruge ssh -p 80 appuals@ssh.example.com til at logge ind på din konto på example.com, hvilket naturligvis er en dummy til dokumentation, der ikke findes.



Prøv at løbe f.eks. ssh -t -t -R -p 80 appuals@ssh.example.com og se om dette løser problemet. Du bliver selvfølgelig nødt til at erstatte navnet med din aktuelle konto og værtsnavn for at kunne logge ind på systemet. Dette tvinger tildelingen af ​​en terminal, så du skal ikke se, at pseudoterminalen ikke tildeles, fordi stdin ikke er en terminalfejl.

På den anden side ender du måske bare med en konstant række fejlmeddelelser. Nogle brugere har bemærket, at dette kan betragtes som underholdende.

Det er bestemt frustrerende, uanset hvad, så brug Ctrl + C til at dræbe processen.



pseudo-terminal

Du kan prøve enten kun at bruge en t-switch eller øge antallet. Hvis dette ikke virker, skal du udskifte alle -t-switches med en -T-switch i kommandoen, f.eks. ssh -T -R -p 80 appuals@ssh.example.com og se om det fungerer.

Denne metode deaktiverer hele den pseudo-terminale allokeringsproces helt, så den fungerer muligvis i tilfælde, hvor tvang ikke gør det. Naturligvis bør intet af dette være et problem fra kommandolinjen, men sørg for at lave en note, når du finder ud af, hvilken indstilling der fungerer fra dit script, så du kan bruge den i fremtidige scripts, du skal køre for at få adgang til serveren.

Da ssh-kommandoen gav disse to modsatte muligheder lignende navne, skal du huske at -t tvinger tildelingen af ​​pseudo-terminaler, mens -T deaktiverer den. Disse muligheder er store og små bogstaver, og de er ofte nødvendige indefra i scripts, fordi ssh har brug for en traditionel TTY-terminal for at fungere. I dit tilfælde vil du naturligvis bruge din terminalemulator til dette formål.

Metode 2: Brug af sshpass

Nogle mennesker finder måske ud af, at deres scripts fungerer bedre med kommandoen sshpass, som ikke er inkluderet som standard. Du kan altid installere det med sudo apt-get install sshpass eller sudo yum install sshpass, hvis du foretrækker at prøve det, eller fordi du har brug for det til din specifikke brugssag.

Hvis du ikke allerede bruger det, har du sandsynligvis ikke brug for det. Ikke desto mindre kan du bruge de samme teknikker til at overraske fejlmeddelelser relateret til pseudoterminalallokering også i denne slags miljø.

Brug for eksempel sshpass -p adgangskode ssh -T appuals@ssh.example.com for at tvinge systemet til at arbejde indefra i dit script.

Metode 3: Rettelse af jobstyringsfejl

Nogle gange får du muligvis en anden fejlmeddelelse, selv efter at have rettet alt dette op. Hvis du modtager en advarsel, der ikke læser adgang til tty, og derefter bliver du mindet om, at der ikke er nogen jobkontrol i din skal, skal du kunne arbejde noget normalt.

Denne fejl skyldes, at noget er uregelmæssigt på fjernserveren relateret til enten csh, tcsh eller muligvis endda Almquist eller anden shell. Du har muligvis ikke bemærket det, fordi du modtog andre fejlmeddelelser, men forudsat at du ikke ser andre om pseudo-terminaler, skulle det være muligt at fortsætte relativt som den måde, du normalt ville.

Du vil muligvis ikke prøve at bruge Ctrl + Z i dette tilfælde for at stoppe processer, fordi der muligvis ikke er nogen måde at få dem startet op igen. Hvis du får en fejlmeddelelse, der læser, at der er stoppede job, når du afslutter, får du ikke lov til at logge af.

stoppede job

Brug kommandoer ps og kill til at lukke job, du ikke kan lukke, forudsat at du ikke har noget imod at miste arbejde i processen. Du kan afslutte nu.

Mærker Linux-vejledning ssh 3 minutter læst