Hva er hensikten med en pseudo-tty?


Beste svaret

Å kjøre programmer på en terminal gir deg ekstra funksjonalitet som ikke er der når du kjører programmer som batchjobber Hvis du for eksempel kjører en prosess på terminalen, kan du avbryte den ved å trykke Ctrl + C, men hvis en prosess ikke er tilknyttet en terminal, kan du ikke avbryte den med Ctrl + C, i stedet for at du sannsynligvis ville ha å kjøre kill eller noe sånt. Terminaler blir forklart mer detaljert i dette svaret.

Fjernkontrollen sshd bruker et pseudo-terminalpar for å påta seg rollen som tastatur og skjerm. Hvis den eksterne prosessen leste fra en «ekte» terminal, for eksempel /dev/tty1, ville den få sin inngang rett fra tastaturet. I stedet overfører sshd -prosessen tastetrykkene til den eksterne prosessen ved å skrive dem til mesterenden av pseudoterminalen. Programmet du kjører mottar da data på slaveenden av pseudo-terminalen, som om den skulle komme fra tastaturet. På samme måte, når prosessen skriver til slaveenden av pseudo-terminalen, har den en illusjon om at den «skriver til en» ekte «terminal som vil skrive ut tegn på en skjerm. Men i stedet les sshd dataene som er skrevet på masterenden, krypterer dem og sender dem over ledningen tilbake til deg.

For å se hva som skjer uten en terminal , prøv å kjøre noe sånt som ssh -T remote.host. Det vil starte skallet på den eksterne verten, men skallet gidder ikke å skrive ut en melding fordi den ikke har noen terminal, så den tror at den kjører i batch-modus. Du vil ikke kunne kjøre sudo på den eksterne verten fordi sudo krever at passordet skrives på en terminal i stedet for å lese det fra standardinngang.

Som standard tildeler fjernkontrollen sshd bare en pty når du ikke spesifiserer en kommando. Hvis du prøver ssh remote.host screen, vil du se at spesifisering av kommandoen undertrykker pty-tildelingen, og du vil være i trøbbel igjen. For å unngå dette, spesifiser alternativet -t, og deretter vil fjernkontrollen sshd alltid prøve å tildele en terminal.

… med mindre det ikke er noen terminal i den lokale enden å snakke med, for eksempel hvis ssh leser fra en fil. I så fall kan du tvinge pty-tildeling ved å bruke ssh -t -t. Dette kan ha noen utilsiktede effekter, fordi den eksterne enden vil reagere på hver byte skrevet til ssh «s standardinngang som om den var skrevet på tastaturet. For eksempel Ctrl + C på tastaturet produserer ASCII-koden 3, så hvis den lokale ssh skulle tilfeldigvis lese en byte med verdien 3 fra inngangsfilen, vil den sende den ned til den eksterne verten, ekstern sshd vil skrive den til master enden av pty, og kjernen vil sende SIGINT til prosessavlesningen fra slaveenden. Terminaler er interessante skapninger.

Legg igjen en kommentar

Din e-postadresse vil ikke bli publisert. Obligatoriske felt er merket med *