Se o putty estiver conectado a um servidor ssh em execução no Windows e o cmd.exe for usado como shell, as teclas do cursor não funcionarão corretamente. Normalmente você pode recuperar comandos antigos, cursor up/down
mas dentro do putty isso não funciona mais.
Alterar o tipo de terminal para massa não funcionou para mim. Usar um shell alternativo não seria solução. Se não for possível com o putty, talvez exista algum cliente ssh alternativo que permita modificações nas combinações de teclas/emulação de terminal?
Responder1
O problema provavelmente não é o cliente, mas o servidor.
PuTTY é um emulador de terminal Xterm/VT100. O terminal VT100 seria conectado a uma extremidade de um fluxo serial simples de 8 bits e enviaria "sequências de escape" especiais para teclas de função - por exemplo, ESC [ A
para a Upseta - e isso persistiu no Linux e no BSD de hoje. A edição de linha além do básico ← Backspaceé feita pelos próprios programas, lendo e analisando essas sequências de escape e gerando mais delas para mover o cursor e exibir o texto. Tanto o Telnet quanto o SSH podem ser considerados simples portadoras para o fluxo de terminal, exatamente como uma linha serial.
A causa dos seus problemas é que os consoles do Windows fazemnãofunciona dessa maneira – em vez de ser um stream, o console é um buffer de tela. O subsistema do console possui edição de linha (e histórico básico) integrado ecmd.exesimplesmente usa essa funcionalidade comLerConsole()– os eventos das teclas de seta não alcançam o programa, a menos que ele desative especificamente o modo "entrada de linha". (A API do Windows também possui funções separadas para estilo de saída.) Quandocmd.exeA entrada do é anexada a um pipe, em vez de um console, esse sistema é ignorado e tudo é inserido diretamente no fluxo de entrada. Desdecmd.exenão foi escrito para lidar com sequências do VT100, não dá nenhum tratamento especial a elas e ESC
simplesmente se torna parte do comando inserido.
Isto significa que os servidores SSH do Windows, bem como o servidor Telnet integrado do Windows, têm de converter sequências VT100 em eventos de consola e formatar a saída da consola em sequências VT100. Nem todos os servidores SSH realmente se preocupam em fazer isso. Certifique-se de que a extremidade remota não tenha alterado o software do servidor SSH que ele usa. Se as chavesusado para trabalharcom omesmoconfiguração como agora, tente redefinir o PuTTY para suas configurações padrão com putty -cleanup
ou excluindo a ramificação do registro manualmente.
O Windows PowerShell vem comremotoapoiar, que utiliza edição de linha local e envia apenas linhas completas para o terminal remoto, evitando esse problema. Paracmd.exe, isso pode ser alcançado compsexec(embora a conexão SMB não seja criptografada por padrão),ouvocê provavelmente poderia começarcmdde dentro de uma sessão remota do PowerShell.