Если putty подключен к ssh-серверу, работающему на windows, и cmd.exe используется как оболочка, клавиши курсора работают неправильно. Обычно вы можете вызвать старые команды с помощью, cursor up/down
но внутри putty это больше не работает.
Изменение типа терминала для putty не помогло мне. Использование альтернативной оболочки не будет решением. Если это невозможно с putty, возможно, есть какой-либо альтернативный клиент ssh, который позволяет изменять привязки клавиш/эмуляцию терминала?
решение1
Проблема, скорее всего, не в клиенте, а в сервере.
PuTTY — это эмулятор терминала Xterm/VT100. Терминал VT100 подключался к одному концу простого 8-битного последовательного потока и отправлял специальные «escape-последовательности» для функциональных клавиш — например, ESC [ A
для Upстрелки — и это сохранилось в современных Linux и BSD. Редактирование строк за пределами базового ← Backspaceвыполняется самими программами, путем чтения и анализа этих escape-последовательностей и вывода большего их количества для перемещения курсора и отображения текста. И Telnet, и SSH можно рассматривать как простые носители для терминального потока, точно так же, как последовательная линия.
Причина ваших проблем в том, что консоли Windows ненетработать таким образом – вместо того, чтобы быть потоком, консоль является буфером экрана. Подсистема консоли имеет встроенное редактирование строк (и базовую историю), иcmd.exeпросто использует эту функциональность сReadConsole()– события клавиш со стрелками не достигают программы, если она специально не отключает режим «строчного ввода». (Windows API также имеет отдельные функции для оформления вывода.) Когдаcmd.exeВходной сигнал подключен к трубе, а не к консоли, эта система обходит стороной, и все вставляется непосредственно во входной поток. Посколькуcmd.exeне был написан для работы с последовательностями VT100, не обеспечивает им никакой специальной обработки и ESC
просто становится частью введенной команды.
Это означает, что серверы Windows SSH, а также встроенный сервер Telnet Windows должны транслировать последовательности VT100 в события консоли и форматированный вывод консоли в последовательности VT100. Не все серверы SSH на самом деле утруждают себя этим. Убедитесь, что удаленная сторона не изменила программное обеспечение сервера SSH, которое она использует. Если ключираньше работалстакой жеЕсли у вас текущая конфигурация, попробуйте сбросить PuTTY до настроек по умолчанию putty -cleanup
или вручную удалить ветку реестра.
Windows PowerShell поставляется судаленныйподдерживать, который использует локальное редактирование строк и отправляет только полные строки на удаленный конец, избегая этой проблемы. Дляcmd.exe, этого можно достичь с помощьюpsexec(хотя SMB-соединение по умолчанию не зашифровано),илиВы, вероятно, могли бы начатьcmdиз удаленного сеанса PowerShell.