Linux

強制 telnet / ssh 使用 crtl-H 退格

  • September 23, 2012

我有一些設備連接到 Cisco 串列術語伺服器;當我telnet直接到思科上的埠時,許多工作正常。但是,我有一些頑固的設備不會使用Backspace,因為它們預設映射到 telnet。

萬一這很重要,我會rxvt在 Debian 擠壓下(在 X 視窗中)進行遠端登錄。 TERM設置為rxvt,但無論我使用vt100,vt101還是xterm… 更改TERM都沒有效果。根據我在舊的 Kermit FAQTERM中看到的內容,我開始了改變的道路。FWIW,也不工作。stty erase ^h``stty erase ^?

我注意到Backspace如果我使用來自…的原始 TCP 套接字,它可以在這些設備上正常工作,netcatnc 192.168.12.117 2006;但是,然後我遇到了密碼未隱藏或終端分頁的其他問題。

如何有選擇地強制 telnet 和 ssh 映射BackspaceCtrl``H這些設備?另外,我應該使用什麼標準來評估這是否是設備中的錯誤?

編輯

如果它很重要,這是有showkey -a問題的鍵的輸出……^?對應於Backspace並且^HCtrl``H當我查看The Linux Keyboard and Console Howto時,似乎我應該接近了,但我似乎無法破譯我能做些什麼來改變這一點。我試過各種咒語loadkeys都沒有效果。

[mpenning@hotcoffee docs]$ sudo showkey -a

Press any keys - Ctrl-D will terminate this program

^?      127 0177 0x7f
^H        8 0010 0x08

我還包括來自…的相關輸出dumpkeys……這是我係統中的目前映射(在某些有問題的設備上不起作用)。如果我能弄清楚如何Backspace做同樣的事情Ctrl``H,我會有一個解決方案。

[mpenning@hotcoffee docs]$ sudo dumpkeys | grep -Ei "backspace|127"
keycode   8 = BackSpace        ampersand        braceleft       
keycode  14 = BackSpace        Delete          
       control keycode  14 = BackSpace       
keycode 127 =
[mpenning@hotcoffee docs]$

我終於在Anne Baretta 的 Linux Keyboard Hall of Shame中找到了答案……似乎更改xterm/rxvt中的鍵映射對telnet.

我在嗅探 telnet 連接時驗證了這一點。首先,我嗅探了 telnet 會話,並看到它已Backspace發送0x7f到主機。接下來我故意闖入Backspace使用(因此rxvtstty erase $我的 Backspace 映射到美元符號rxvt)。完成此操作後,我不得不在 中$按退格鍵rxvt,但在遠端主機上使用時telnet仍然發送。0x7f``Backspace

解決方案

創建一個名為kbdfix(如下)的腳本,並使其具有755權限可執行;您將需要從您的分發檔案中載入的tclsh和包。expect

#!/usr/bin/expect

#Name this file as kbdfix and make it executable in your path
eval spawn -noecho $argv

interact {
\177        {send "\010"}
"\033\[3~"  {send "\177"}
}

現在要連接到損壞的主機,我輸入kbdfix telnet 192.168.12.117 2006,然後Backspace工作。

請注意對上面的 2006 感到困惑的任何人……這是 Cisco 術語伺服器用於串列連接到損壞設備(在本例中為 Brocade FCX 交換機)的控制台的 TCP 埠。

如果您只是遠端登錄到不喜歡的設備Backspace,您將使用kbdfix telnet <addr_of_the_broken_device>. 當我通過 ssh 連接到具有類似問題的 DLink DGS-3200 乙太網交換機時,我也將它與 ssh 一起使用;語法是kbdfix ssh 172.16.1.26.

引用自:https://unix.stackexchange.com/questions/13413