Fix: Pseudo-terminal tildeles ikke, fordi stdin ikke er en terminal
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.
Inden du går videre, skal du sørge for at du har føjet din offentlige nøgle til SSH-agenten og derefter prøve 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 muligvis 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 pseudoterminalallokering. Lad os for eksempel sige, at du ville bruge ssh -p 80 [email protected] 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 [email protected] og se om dette løser problemet. Du bliver selvfølgelig nødt til at erstatte navnet med din faktiske konto og værtsnavn for at kunne logge ind på systemet. Dette tvinger tildelingen af en terminal, så du bør ikke se, at pseudoterminalen ikke tildeles, fordi stdin ikke er en terminalfejl.
På den anden side kan du bare ende 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.
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 [email protected] og se om det fungerer.
Denne metode deaktiverer hele den pseudo-terminale allokeringsproces helt, så det fungerer muligvis i tilfælde, hvor det ikke tvinges. Naturligvis skal 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 indstillinger 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 [email protected] 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 du bliver 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 fik andre fejlmeddelelser, men forudsat at du ikke ser andre om pseudo-terminaler, skal 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.
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