Solución: la pseudo-terminal no se asignará porque stdin no es una terminal



Pruebe Nuestro Instrumento Para Eliminar Los Problemas

En la mayoría de los casos, recibirá un confuso error de 'pseudo-terminal no se asignará porque stdin no es un terminal' solo cuando esté ejecutando algún tipo de comando SSH desde un script. Si está ejecutando el mismo comando desde la línea de comandos, entonces podría funcionar perfectamente bien.



Antes de continuar, asegúrese de haber agregado su clave pública al agente SSH y luego intente usar ssh nuevamente. Es posible que le haya faltado una llave. Por otro lado, si esto no funciona, tendrá que solucionar un poco los problemas en su secuencia de comandos.



Método 1: Forzar y deshabilitar la asignación de pseudo-tty

Hay un par de opciones de línea de comandos que pueden solucionar el problema rápidamente. Pruebe ssh -t -t -R seguido del resto de lo que estaba intentando conectarse para forzar la asignación de pseudo-terminal. Por ejemplo, supongamos que iba a utilizar ssh -p 80 appuals@ssh.example.com para iniciar sesión en su cuenta en example.com, que por supuesto es una prueba ficticia para la documentación que no existe.



Intente ejecutar, por ejemplo ssh -t -t -R -p 80 appuals@ssh.example.com y vea si esto soluciona el problema. Por supuesto, deberá reemplazar el nombre con su cuenta real y el nombre de host para poder iniciar sesión correctamente en el sistema. Esto fuerza la asignación de una terminal, por lo que no debería ver que la pseudo-terminal no se asignará porque stdin no es un error de terminal.

Por otro lado, es posible que acabe con una serie constante de mensajes de error. Algunos usuarios han comentado que esto podría considerarse divertido.

Sin embargo, es ciertamente frustrante, así que use Ctrl + C para finalizar el proceso.



pseudo-terminal

Puede intentar usar solo un modificador -t o aumentar el número. Si esto no funciona, reemplace los interruptores -t con un interruptor -T en el comando, p. Ej. ssh -T -R -p 80 appuals@ssh.example.com y ver si funciona.

Este método deshabilita todo el proceso de asignación de pseudo-terminal por completo, por lo que podría funcionar en casos donde forzarlo no lo hace. Por supuesto, nada de esto debería ser un problema desde la línea de comandos, pero asegúrese de tomar nota cuando encuentre qué opción funciona desde su script para que pueda usarla en cualquier script futuro que tenga que ejecutar para acceder a dicho servidor.

Dado que el comando ssh dio a estas dos opciones opuestas nombres similares, recuerde que -t fuerza la asignación de pseudo-terminales mientras que -T la desactiva. Estas opciones distinguen entre mayúsculas y minúsculas y, a menudo, son necesarias desde el interior de los scripts porque ssh necesita una terminal TTY tradicional para funcionar. Naturalmente, en su caso, estaría usando su emulador de terminal para este propósito.

Método 2: usar sshpass

Algunas personas pueden encontrar que sus scripts funcionan mejor con el comando sshpass, que no se incluye de forma predeterminada. Siempre puedes instalarlo con sudo apt-get install sshpass o sudo yum install sshpass si prefieres probarlo o porque lo necesitas para tu caso de uso específico.

Si aún no lo está utilizando, probablemente no lo necesite. No obstante, también puede utilizar las mismas técnicas para sorprender mensajes de error relacionados con la asignación de pseudo-terminales en este tipo de entorno.

Por ejemplo, use sshpass -p contraseña ssh -T appuals@ssh.example.com para forzar al sistema a trabajar desde dentro de su script.

Método 3: corrección de errores de gestión de trabajos

En ocasiones, puede recibir otro mensaje de error incluso después de arreglar todo esto. Si recibe una advertencia que dice que no hay acceso a tty y luego se le recuerda que no hay control de trabajo en su shell, debería poder trabajar con cierta normalidad.

Este error es causado por algo irregular en el servidor remoto relacionado con csh, tcsh o posiblemente incluso con Almquist u otro shell. Es posible que no lo haya notado porque estaba recibiendo otros mensajes de error, pero siempre que no vea ningún otro sobre pseudo-terminales, debería ser posible continuar relativamente como lo haría normalmente.

Sin embargo, es posible que no desee intentar usar Ctrl + Z en este caso para detener los procesos, porque es posible que no haya forma de que se reinicien nuevamente. Si recibe un mensaje de error que dice que hay trabajos detenidos cuando sale, no podrá cerrar la sesión.

trabajos detenidos

Use los comandos ps y kill para cerrar cualquier trabajo que no pueda cerrar, asumiendo que no le importa perder trabajo en el proceso. Podrás salir ahora.

Etiquetas Cómo hacer Linux ssh 3 minutos de lectura