強制 telnet / ssh 使用 crtl-H 退格
我有一些設備連接到 Cisco 串列術語伺服器;當我
telnet
直接到思科上的埠時,許多工作正常。但是,我有一些頑固的設備不會使用Backspace
,因為它們預設映射到 telnet。萬一這很重要,我會
rxvt
在 Debian 擠壓下(在 X 視窗中)進行遠端登錄。TERM
設置為rxvt
,但無論我使用vt100
,vt101
還是xterm
… 更改TERM
都沒有效果。根據我在舊的 Kermit FAQTERM
中看到的內容,我開始了改變的道路。FWIW,也不工作。stty erase ^h``stty erase ^?
我注意到
Backspace
如果我使用來自…的原始 TCP 套接字,它可以在這些設備上正常工作,netcat
即nc 192.168.12.117 2006
;但是,然後我遇到了密碼未隱藏或終端分頁的其他問題。如何有選擇地強制 telnet 和 ssh 映射
Backspace
到Ctrl``H
這些設備?另外,我應該使用什麼標準來評估這是否是設備中的錯誤?編輯
如果它很重要,這是有
showkey -a
問題的鍵的輸出……^?
對應於Backspace
並且^H
是Ctrl``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
使用(因此rxvt
將stty 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
.