Si PuTTY está conectado a un servidor SSH que se ejecuta en Windows y se utiliza cmd.exe como shell, las teclas del cursor no funcionan correctamente. Normalmente, puedes recuperar comandos antiguos con cursor up/down
PuTTY, pero esto ya no funciona.
Cambiar el tipo de terminal para PuTTY no me funcionó. Usar un shell alternativo no sería una solución. Si no es posible con PuTTY, ¿quizás exista algún cliente ssh alternativo que permita modificaciones en las combinaciones de teclas/emulación de terminal?
Respuesta1
Lo más probable es que el problema no sea el cliente, sino el servidor.
PuTTY es un emulador de terminal Xterm/VT100. El terminal VT100 se conectaría a un extremo de un flujo serial simple de 8 bits y enviaría "secuencias de escape" especiales para las teclas de función (por ejemplo, ESC [ A
para la Upflecha) y esto ha persistido en Linux y BSD de hoy. La edición de líneas más allá de lo básico ← Backspacela manejan los propios programas, leyendo y analizando estas secuencias de escape, y generando más para mover el cursor y mostrar texto. Tanto Telnet como SSH pueden considerarse portadores simples para el flujo del terminal, exactamente como una línea serie.
Lo que causa tus problemas es que las consolas de Windows no lo hacen.nofunciona de esa manera: en lugar de ser una transmisión, la consola es un búfer de pantalla. El subsistema de la consola tiene edición de líneas (e historial básico) incorporada, ycmd.exesimplemente usa esta funcionalidad conLeerConsola()– los eventos de las teclas de flecha no llegan al programa a menos que desactive específicamente el modo de "entrada de línea". (La API de Windows también tiene funciones separadas para el estilo de salida).cmd.exeLa entrada de está conectada a una tubería, en lugar de a una consola, este sistema se omite y todo se inserta directamente en el flujo de entrada. Desdecmd.exeno fue escrito para tratar con secuencias VT100, no les da ningún tratamiento especial y ESC
simplemente se convierte en parte del comando ingresado.
Esto significa que los servidores SSH de Windows, así como el servidor Telnet integrado de Windows, tienen que traducir secuencias VT100 a eventos de consola y la salida formateada de la consola a secuencias VT100. No todos los servidores SSH se molestan en hacerlo. Asegúrese de que el extremo remoto no haya cambiado el software del servidor SSH que utiliza. si las llavesSolía trabajarcon elmismoconfiguración como ahora, intente restablecer PuTTY a su configuración predeterminada con putty -cleanup
o eliminando la rama del registro manualmente.
Windows PowerShell viene conremotoapoyo, que utiliza edición de líneas local y solo envía líneas completas al extremo remoto, evitando este problema. Paracmd.exe, esto se puede lograr conpsexec(aunque la conexión SMB no está cifrada de forma predeterminada),oprobablemente podrías empezarcmddesde una sesión remota de PowerShell.