¿Cuál es el propósito de un pseudo-tty?


La mejor respuesta

La ejecución de programas en una terminal le brinda una funcionalidad adicional que no existe cuando ejecuta programas como trabajos por lotes . Por ejemplo, si ejecuta un proceso en la terminal, puede interrumpirlo presionando Ctrl + C, pero si un proceso no está asociado con ninguna terminal, no puede interrumpirlo con Ctrl + C, en su lugar probablemente lo habría hecho. para ejecutar kill o algo así. Los terminales se explican con más detalle en esta respuesta.

El proceso remoto sshd utiliza un par de pseudo-terminales para asumir el papel de un teclado y una pantalla. Si el proceso remoto estaba leyendo desde una terminal «verdadera», como /dev/tty1, entonces obtendría su entrada directamente desde el teclado. En su lugar, el proceso sshd pasa sus pulsaciones de teclas al proceso remoto escribiéndolas en el extremo maestro del pseudo-terminal. El programa que está ejecutando recibe datos en el extremo esclavo del pseudo-terminal, como si vinieran del teclado. Asimismo, cuando el proceso escribe en el extremo esclavo del pseudo-terminal, tiene la ilusión de que «s escribiendo en un terminal» verdadero «que imprime caracteres en una pantalla. Pero en su lugar sshd lee los datos escritos en el extremo maestro, los encripta y los envía a través del cable de regreso a usted.

Para ver qué sucede sin un terminal , intente ejecutar algo como ssh -T remote.host. Se iniciará el shell en el host remoto, pero el shell no se molestará en imprimir un mensaje porque no tiene terminal, por lo que cree que se está ejecutando en modo por lotes. Tampoco podrá ejecutar sudo en el host remoto porque sudo exige que la contraseña se escriba en un terminal en lugar de leer desde la entrada estándar.

Por defecto, el sshd remoto asignará un pty sólo cuando no especifique un comando. Si prueba ssh remote.host screen, verá que especificar el comando suprime la asignación de pty y volverá a tener problemas. Para evitar esto, especifique la opción -t, y luego el sshd remoto siempre intentará asignar un terminal.

… a menos que no haya una terminal en el extremo local con quien hablar, como si ssh está leyendo un archivo. En ese caso, puede forzar la asignación de pty mediante ssh -t -t. Esto puede tener algunos efectos no deseados, porque el extremo remoto reaccionará a cada byte escrito en la entrada estándar de ssh «como si se escribiera en el teclado. Por ejemplo, Ctrl + C en el teclado produce el código ASCII 3, por lo que si el ssh local lee un byte con el valor 3 de su archivo de entrada, lo pasará al host remoto, el remote sshd lo escribirá en el extremo maestro del pty, y el kernel enviará SIGINT a la lectura del proceso desde el extremo esclavo. Los terminales son criaturas interesantes.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *