2

Если замазка подключена к ssh-серверу, работающему под Windows, и cmd.exe используется в качестве оболочки, клавиши курсора работают некорректно. Обычно вы можете вспомнить старые команды с cursor up/down но внутри замазки это больше не работает.

Изменение типа терминала для замазки не работает для меня. Использование альтернативной оболочки не будет решением. Если это невозможно с putty, возможно, есть какой-нибудь альтернативный ssh-клиент, который позволяет модифицировать привязки клавиш / эмуляцию терминала?

1 ответ1

5

Проблема, скорее всего, не в клиенте, а в сервере.

PuTTY - эмулятор терминала Xterm/VT100. Терминал VT100 будет подключен к одному концу простого 8-битного последовательного потока и будет посылать специальные «escape-последовательности» для функциональных клавиш - например, ESC [ A для стрелки вверх - и это сохраняется в современных Linux и BSD. Строковое редактирование выходит за рамки базового ← Backspace обрабатывается самими программами, читая и анализируя эти escape-последовательности и выводя их больше для перемещения курсора и отображения текста. Как Telnet, так и SSH могут рассматриваться как простые носители для терминального потока, точно так же, как последовательная линия.

Что вызывает ваши проблемы, так это то, что консоли Windows не работают таким образом - вместо того, чтобы быть потоком, консоль является экранным буфером. В консольную подсистему встроено редактирование строк (и базовая история), и cmd.exe просто использует эту функцию с ReadConsole () - события клавиш со стрелками не достигают программы, если она специально не отключает режим "линейного ввода". (Windows API также имеет отдельные функции для оформления вывода.) Когда вход cmd.exe подключен к каналу, а не к консоли, эта система обходится, и все вставляется непосредственно во входной поток. Поскольку cmd.exe не был написан для работы с последовательностями VT100, он не предоставляет им какой-либо специальной обработки, и ESC просто становится частью введенной команды.

Это означает, что SSH-серверы Windows, а также встроенный в Windows сервер Telnet должны преобразовывать последовательности VT100 в события консоли и форматировать вывод консоли в последовательности VT100. Не все SSH-серверы на самом деле пытаются это сделать. Убедитесь, что удаленный конец не изменил программное обеспечение сервера SSH, которое он использует. Если ключи работали с той же конфигурацией, что и сейчас, попробуйте сбросить PuTTY к его настройкам по умолчанию с помощью putty -cleanup или путем удаления ветки реестра вручную.

Windows PowerShell поставляется с поддержкой удаленного взаимодействия, которая использует локальное редактирование строк и отправляет только полные строки на удаленный конец, избегая этой проблемы. Для cmd.exe это может быть достигнуто с помощью psexec (хотя SMB-соединение по умолчанию не шифруется), или вы можете запустить cmd из удаленного сеанса PowerShell.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .