Care este scopul unui pseudo-tty?


Cel mai bun răspuns

Rularea programelor pe un terminal vă oferă funcționalități suplimentare care nu există atunci când rulați programe ca joburi batch De exemplu, dacă rulați un proces pe terminal, îl puteți întrerupe apăsând Ctrl + C, dar dacă un proces nu este asociat cu niciun terminal, nu îl puteți întrerupe cu Ctrl + C, în schimb probabil că veți avea pentru a rula kill sau ceva de genul acesta. Terminalele sunt explicate mai detaliat în acest răspuns.

Procesul la distanță sshd folosește o pereche de pseudo-terminale pentru a-și asuma rolul unei tastaturi și a unui ecran. Dacă procesul de la distanță citea de la un terminal „adevărat”, cum ar fi /dev/tty1, atunci ar primi intrarea direct de la tastatură. În schimb, procesul sshd transmite tastele dvs. la procesul de la distanță, scriindu-le la capătul principal al pseudo-terminalului. Programul pe care îl executați primește apoi date despre capătul sclav al pseudo-terminalului, ca și cum ar proveni de la tastatură. La fel, atunci când procesul scrie pe capătul sclav al pseudo-terminalului, are iluzia că Scrie pe un terminal „adevărat” care ar putea imprima caractere pe un ecran. În schimb, sshd citește datele scrise pe capătul principal, le criptează și le trimite prin cablu înapoi către dvs. , încercați să rulați ceva de genul ssh -T remote.host. Va porni shell-ul de pe gazda de la distanță, dar shell-ul nu va deranja să tipărească un prompt deoarece nu are terminal, așa că crede că rulează în modul batch. De asemenea, nu veți putea să rulați sudo pe gazda de la distanță deoarece sudo solicită introducerea parolei pe un terminal în loc de citire din intrarea standard.

În mod implicit, telecomanda sshd va aloca un pty numai atunci când nu specificați o comandă. Dacă încercați ssh remote.host screen, atunci veți vedea că specificarea comenzii suprima alocarea pty și veți avea din nou probleme. Pentru a evita acest lucru, specificați opțiunea -t, apoi telecomanda sshd va încerca întotdeauna să aloce un terminal.

… cu excepția cazului în care există un terminal la capătul local cu care să vorbești, cum ar fi dacă ssh citește dintr-un fișier. În acest caz, puteți forța alocarea pty utilizând ssh -t -t. Acest lucru poate avea unele efecte neintenționate, deoarece capătul de la distanță va reacționa la fiecare octet scris la intrarea standard ssh ca și cum ar fi fost tastat la tastatură. De exemplu, Ctrl + C la tastatura produce codul ASCII 3, deci dacă ssh local ar trebui să citească un octet cu valoarea 3 din fișierul său de intrare, acesta îl va transmite gazdei la distanță, remote sshd îl va scrie la capătul principal al pty și nucleul va trimite SIGINT la citirea procesului de la capătul slave. Terminalele sunt creaturi interesante.

Lasă un răspuns

Adresa ta de email nu va fi publicată. Câmpurile obligatorii sunt marcate cu *