Hvad er formålet med en pseudo-tty?


Bedste svar

At køre programmer på en terminal giver dig ekstra funktionalitet, der ikke er der, når du kører programmer som batchjob Hvis du f.eks. Kører en proces på terminalen, kan du afbryde den ved at trykke på Ctrl + C, men hvis en proces ikke er knyttet til nogen terminal, kan du ikke afbryde den med Ctrl + C, i stedet for ville du sandsynligvis have at køre kill eller noget lignende. Terminaler forklares mere detaljeret i dette svar.

Fjernbetjeningen sshd -processen bruger et pseudoterminalpar for at påtage sig rollen som tastatur og skærm. Hvis fjernprocessen læste fra en “ægte” terminal, såsom /dev/tty1, ville den få sin input lige fra tastaturet. I stedet sender sshd -processen dine tastetryk til fjernprocessen ved at skrive dem til masterenden af ​​pseudoterminalen. Det program, du kører, modtager derefter data om slaveenden af ​​pseudoterminalen, som om den kom fra tastaturet. Ligeledes når processen skriver til slaveenden af ​​pseudoterminalen, har den illusionen om, at den “skriver til en” sand “terminal, der udskriver tegn på en skærm. Men i stedet læser sshd dataene skrevet på masterenden, krypterer dem og sender dem over ledningen tilbage til dig.

For at se hvad der sker uden en terminal , prøv at køre noget som ssh -T remote.host. Det starter skallen på den eksterne vært, men skallen gider ikke at udskrive en prompt, fordi den ikke har nogen terminal, så den mener, at den kører i batch-tilstand. Du vil heller ikke kunne køre sudo på den eksterne vært, fordi sudo kræver, at adgangskoden indtastes på en terminal i stedet for at læse det fra standardinput.

Som standard tildeler fjernbetjeningen sshd kun en pty, når du ikke angiver en kommando. Hvis du prøver ssh remote.host screen, vil du se, at angivelse af kommandoen undertrykker pty-tildelingen, og du vil være i problemer igen. For at undgå dette skal du angive -t, og derefter vil fjernbetjeningen sshd altid forsøge at tildele en terminal.

… medmindre der ikke er nogen terminal i den lokale ende at tale med, f.eks. hvis ssh læser fra en fil. I så fald kan du tvinge pty-tildeling ved hjælp af ssh -t -t. Dette kan have nogle utilsigtede effekter, fordi den fjerne ende reagerer på hver byte, der skrives til ssh “s standardindgang, som om den var skrevet på tastaturet. For eksempel Ctrl + C ved tastaturet producerer ASCII-kode 3, så hvis den lokale ssh tilfældigvis læser en byte med værdien 3 fra dens inputfil, sender den den ned til den eksterne vært, fjernbetjening sshd skriver det til master enden af ​​pty, og kernen sender SIGINT til proceslæsningen fra slaveenden. Terminaler er interessante væsner.

Skriv et svar

Din e-mailadresse vil ikke blive publiceret. Krævede felter er markeret med *