如何配置 putty 鍵綁定以正確使用 cmd.exe?

如何配置 putty 鍵綁定以正確使用 cmd.exe?

如果 putty 連接到在 Windows 上執行的 ssh 伺服器並且使用 cmd.exe 作為 shell,則遊標鍵無法正常運作。通常,您可以使用 putty 呼叫舊命令,cursor up/down但在 putty 中這不再起作用。

更改膩子的終端類型對我來說不起作用。使用替代 shell 並不是解決方案。如果用 putty 不可能,也許有任何替代的 ssh 用戶端允許修改鍵綁定/終端仿真?

答案1

問題很可能不是客戶端,而是伺服器。

PuTTY 是 Xterm/VT100 終端模擬器。 VT100 終端將連接到一個簡單的 8 位元串列流的一端,並且它將為功能鍵(例如箭頭)發送特殊的“轉義序列”,ESC [ AUp在當今的 Linux 和 BSD 中一直存在。超出基本範圍的行編輯← Backspace由程式本身處理,透過讀取和解析這些轉義序列,並輸出更多轉義序列以移動遊標和顯示文字。 Telnet 和 SSH 都可以被認為是終端流的簡單載體,就像串行線路一樣。

導致您出現問題的原因是 Windows 主控台不是以這種方式工作——控制台不是一個流,而是一個螢幕緩衝區。控制台子系統內建了行編輯(和基本歷史記錄),並且執行程式只需使用此功能即可讀取控制台()– 除非專門停用「行輸入」模式,否則箭頭鍵事件不會到達程式。 (Windows API 也具有用於輸出樣式的單獨函數。)執行程式的輸入連接到管道,而不是控制台,該系統被繞過,所有內容都直接插入輸入流。自從執行程式不是為處理 VT100 序列而編寫的,它不會對它們進行任何特殊處理,而ESC只是輸入命令的一部分。

這表示 Windows SSH 伺服器以及 Windows 內建 Telnet 伺服器必須將 VT100 序列轉換為控制台事件,並將格式化的控制台輸出轉換為 VT100 序列。並不是所有的 SSH 伺服器都願意這麼做。確保遠端沒有更改其使用的SSH伺服器軟體。如果鑰匙曾經工作相同的putty -cleanup與目前的配置一樣,請嘗試使用或手動刪除登錄機碼將 PuTTY 重設為其預設值。

Windows PowerShell 隨附遠端處理支援,它使用本地行編輯,只將完整的行傳送到遠端,避免了這個問題。為了執行程式,這可以透過以下方式實現執行程式(雖然SMB連線預設不加密),或者你也許可以開始指令從 PowerShell 遠端會話。

相關內容