cmd.exe와 올바르게 작동하도록 퍼티 키 바인딩을 구성하는 방법은 무엇입니까?

cmd.exe와 올바르게 작동하도록 퍼티 키 바인딩을 구성하는 방법은 무엇입니까?

Windows에서 실행되는 SSH 서버에 Putty가 연결되어 있고 cmd.exe가 셸로 사용되는 경우 커서 키가 올바르게 작동하지 않습니다. 일반적으로 이전 명령을 불러올 수 있지만 cursor up/down퍼티 내부에서는 더 이상 작동하지 않습니다.

퍼티의 터미널 유형을 변경해도 효과가 없었습니다. 대체 쉘을 사용하는 것은 해결책이 아닙니다. 퍼티로는 불가능하다면 키 바인딩/터미널 에뮬레이션을 수정할 수 있는 대체 SSH 클라이언트가 있을까요?

답변1

문제는 클라이언트가 아니라 서버일 가능성이 높습니다.

PuTTY는 Xterm/VT100 터미널 에뮬레이터입니다. VT100 터미널은 간단한 8비트 직렬 스트림의 한쪽 끝에 연결되며 기능 키(예: ESC [ A화살표) 에 대한 특수 "이스케이프 시퀀스"를 전송하며 Up이는 오늘날의 Linux 및 BSD에서 지속됩니다. 기본 이상의 줄 편집은 ← Backspace프로그램 자체에서 이러한 이스케이프 시퀀스를 읽고 구문 분석하고 커서를 이동하고 텍스트를 표시하기 위해 더 많은 문자열을 출력함으로써 처리됩니다. Telnet과 SSH는 모두 직렬 회선과 마찬가지로 터미널 스트림을 위한 간단한 전달자로 생각할 수 있습니다.

문제의 원인은 Windows 콘솔이~ 아니다그런 식으로 작업하세요. 콘솔은 스트림이 아닌 화면 버퍼입니다. 콘솔 하위 시스템에는 라인 편집(및 기본 기록)이 내장되어 있습니다.cmd.exe단순히 이 기능을 다음과 함께 사용합니다.읽기콘솔()– "라인 입력" 모드를 특별히 비활성화하지 않는 한 화살표 키 이벤트는 프로그램에 도달하지 않습니다. (Windows API에도 출력 스타일을 위한 별도의 기능이 있습니다.)cmd.exe의 입력은 콘솔 대신 파이프에 연결되며 이 시스템은 우회되고 모든 것이 입력 스트림에 직접 삽입됩니다. 부터cmd.exeVT100 시퀀스를 처리하기 위해 작성된 것이 아니며 특별한 처리를 제공하지 않으며 ESC단순히 입력된 명령의 일부가 됩니다.

이는 Windows 내장 Telnet 서버뿐만 아니라 Windows SSH 서버도 VT100 시퀀스를 콘솔 이벤트로 변환하고 형식화된 콘솔 출력을 VT100 시퀀스로 변환해야 함을 의미합니다. 모든 SSH 서버가 실제로 이를 수행하는 것은 아닙니다. 원격 측에서 사용자가 사용하는 SSH 서버 소프트웨어를 변경하지 않았는지 확인하세요. 열쇠일하곤 했어와 더불어같은putty -cleanup지금과 같이 구성하려면 레지스트리 분기를 수동으로 삭제하거나 PuTTY를 기본 설정으로 재설정해 보세요 .

Windows PowerShell은 다음과 함께 제공됩니다.원격지원하다, 로컬 라인 편집을 사용하고 완전한 라인만 원격 끝에 보내 이 문제를 방지합니다. 을 위한cmd.exe, 이는 다음을 사용하여 달성할 수 있습니다.psexec(SMB 연결은 기본적으로 암호화되지 않지만)또는아마 시작할 수도 있을 거야cmdPowerShell 원격 세션 내에서.

관련 정보