Wenn Putty mit einem SSH-Server verbunden ist, der unter Windows läuft, und cmd.exe als Shell verwendet wird, funktionieren die Cursortasten nicht richtig. Normalerweise kann man alte Befehle mit aufrufen, cursor up/down
aber innerhalb von Putty funktioniert das nicht mehr.
Das Ändern des Terminaltyps für Putty hat bei mir nicht funktioniert. Die Verwendung einer alternativen Shell wäre keine Lösung. Wenn dies mit Putty nicht möglich ist, gibt es vielleicht einen alternativen SSH-Client, der Änderungen an den Tastenkombinationen/der Terminalemulation zulässt?
Antwort1
Das Problem liegt höchstwahrscheinlich nicht am Client, sondern am Server.
PuTTY ist ein Xterm/VT100-Terminalemulator. Das VT100-Terminal wird an ein Ende eines einfachen 8-Bit-Seriellenstroms angeschlossen und sendet spezielle „Escape-Sequenzen“ für Funktionstasten – beispielsweise ESC [ A
für den UpPfeil – und dies ist bis heute in Linux und BSD erhalten geblieben. Die Zeilenbearbeitung über das Grundlegende hinaus ← Backspacewird von den Programmen selbst übernommen, indem diese Escape-Sequenzen gelesen und analysiert werden und weitere davon ausgegeben werden, um den Cursor zu bewegen und Text anzuzeigen. Sowohl Telnet als auch SSH können als einfache Träger für den Terminalstrom betrachtet werden, genau wie eine serielle Leitung.
Die Ursache für Ihre Probleme ist, dass Windows-Konsolennichtfunktioniert so – anstatt ein Stream zu sein, ist die Konsole ein Bildschirmpuffer. Das Konsolensubsystem hat eine integrierte Zeilenbearbeitung (und einen grundlegenden Verlauf) undcmd.exenutzt diese Funktionalität einfach mitReadConsole()– Pfeiltastenereignisse erreichen das Programm nicht, es sei denn, es deaktiviert ausdrücklich den „Zeileneingabe“-Modus. (Die Windows-API verfügt auch über separate Funktionen für die Ausgabeformatierung.) Wenncmd.exeDie Eingabe von ist an eine Pipe angeschlossen, statt an eine Konsole. Dieses System wird umgangen und alles wird direkt in den Eingabestrom eingefügt. Dacmd.exewurde nicht für die Verarbeitung von VT100-Sequenzen geschrieben, behandelt diese nicht speziell und ESC
wird einfach Teil des eingegebenen Befehls.
Dies bedeutet, dass Windows-SSH-Server sowie der in Windows integrierte Telnet-Server VT100-Sequenzen in Konsolenereignisse und formatierte Konsolenausgaben in VT100-Sequenzen übersetzen müssen. Nicht alle SSH-Server machen sich tatsächlich die Mühe, dies zu tun. Stellen Sie sicher, dass das Remote-Ende die von ihm verwendete SSH-Serversoftware nicht geändert hat. Wenn die Schlüsselfunktioniertemit demDasselbeWenn die Konfiguration nicht wie bisher ist, versuchen Sie, PuTTY mithilfe von auf die Standardeinstellungen zurückzusetzen putty -cleanup
oder den Registrierungszweig manuell zu löschen.
Windows PowerShell enthältRemote-ZugriffUnterstützung, das lokale Zeilenbearbeitung verwendet und nur vollständige Zeilen an das Remote-Ende sendet, wodurch dieses Problem vermieden wird. Fürcmd.exeDies kann erreicht werden mitpsexec(obwohl die SMB-Verbindung standardmäßig nicht verschlüsselt ist),oderSie könnten wahrscheinlich beginnencmdaus einer PowerShell-Remotesitzung heraus.