Ich habe einige Geräte an einen Cisco Serial Term Server angeschlossen. Viele funktionieren einwandfrei, wenn ich telnet
direkt an den Port des Cisco gehe. Ich habe jedoch einige hartnäckige Geräte, die nicht verwendet werden, Backspaceda sie standardmäßig in Telnet zugeordnet sind.
Für den Fall, dass es wichtig ist, telnet ich rxvt
unter Debian Squeeze (in einem X-Fenster). TERM
gesetzt ist rxvt
, aber es spielt keine Rolle , ob ich verwenden vt100
, vt101
oder xterm
... Wechsel TERM
hat keine Wirkung. Ich begann den Weg des Wandels TERM
basierend auf dem, was ich in einer alten Kermit-FAQ gesehen habe . FWIW stty erase ^h
und stty erase ^?
auch nicht.
Ich habe festgestellt, dass dies Backspaceauf diesen Geräten ordnungsgemäß funktioniert, wenn ich einen unformatierten TCP-Socket von netcat
... ie nc 192.168.12.117 2006
; Dann stoße ich jedoch auf andere Probleme mit nicht versteckten Passwörtern oder Terminal-Paging.
Wie kann ich zwingen selektiv Telnet und SSH zu kartieren , Backspaceum CtrlHfür diese Geräte? Nach welchen Kriterien sollte ich auch bewerten, ob dies ein Fehler im Gerät ist?
BEARBEITEN
Falls es darauf ankommt, ist dies die Ausgabe von showkey -a
für die fraglichen Schlüssel ... ^?
entspricht Backspaceund ^H
ist CtrlH. Es scheint, als sollte ich näher kommen, wenn ich mir das Linux-Tastatur- und Konsolen-Howto anschaue , aber ich kann anscheinend nicht entschlüsseln, was ich tun kann, um dies zu ändern. Ich habe verschiedene Beschwörungsformeln loadkeys
ohne Wirkung ausprobiert .
[mpenning@hotcoffee docs]$ sudo showkey -a
Press any keys - Ctrl-D will terminate this program
^? 127 0177 0x7f
^H 8 0010 0x08
Ich beziehe auch relevante Ausgaben von ein dumpkeys
... Dies ist die aktuelle Zuordnung in meinem System (die auf einigen fraglichen Geräten nicht funktioniert). Wenn ich herausfinden könnte, wie Backspaceich das Gleiche tun kann CtrlH, hätte ich eine Lösung.
[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]$
ssty erase '^?'
? Wenn die Geräte auf einem bestehenC-h
, handelt es sich nicht um einen Telnet-Anruf, sondern um das Terminal (Emulator).Antworten:
Ich habe endlich eine Antwort in Anne Barettas Linux Keyboard Hall of Shame gefunden ... es scheint, dass das Ändern von Tastenzuordnungen in
xterm
/rxvt
nicht gut isttelnet
.Ich habe dies überprüft, als ich an der Telnet-Verbindung gerochen habe. Zuerst habe ich an der Telnet-Sitzung gerochen und gesehen, dass diese an den Host Backspacegesendet wurde
0x7f
. Als nächstes habe ich absichtlich Backspaceauf dierxvt
Verwendung verzichtetstty erase $
(wodurch meine Rücktaste der Dollar-Anmeldung zugeordnet wurderxvt
). Danach musste ich die Rücktaste $drückenrxvt
, wurde abertelnet
trotzdem gesendet,0x7f
wenn ich sie Backspaceauf dem Remote-Host verwendete.LÖSUNG
Erstellen Sie ein Skript mit dem Namen
kbdfix
(unten) und machen Sie es mit755
Berechtigungen ausführbar . Sie benötigen dietclsh
undexpect
Pakete, die aus Ihren Distributionsarchiven geladen wurden.Um nun eine Verbindung zu den defekten Hosts herzustellen, tippe ich
kbdfix telnet 192.168.12.117 2006
und Backspacearbeite.Hinweis für alle, die bis 2006 verwirrt waren ... Dies ist der TCP-Port, den der Cisco Term Server für die serielle Verbindung zur Konsole des defekten Geräts verwendet (in diesem Fall ein Brocade FCX-Switch).
Wenn Sie lediglich ein Telnetting an ein Gerät durchführen, das BackspaceIhnen nicht gefällt , würden Sie es verwenden
kbdfix telnet <addr_of_the_broken_device>
. Ich verwende dies auch mit ssh, wenn ich ssh zu einem DLink DGS-3200-Ethernet-Switch mit ähnlichen Problemen verwende. Die Syntax lautetkbdfix ssh 172.16.1.26
.quelle
stty erase $
ordnet die "Rücktaste" nicht "$" zu, sondern teilt dem tty-Treiber mit, dass zum Löschen eines Zeichens die Taste "$" verwendet werden muss. Wenn Sie Telnet ausführen, befinden Sie sich im Raw-Modus, sodass diese Einstellung ignoriert wird. Eine einfache Lösung wäre, Ihren Terminalemulator so zu konfigurieren, dass er ^ H für die Rücktaste sendet, wie von Gott beabsichtigt. Ein anderer verwendet Ihren Hack, der diese Zeichen im laufenden Betrieb mit "Expect" übersetzt.stty
sich dietelnet
Tastaturlesungen bei der Verwendung nicht geändert habenwireshark
. Diese wichtige Tatsache war mir jedoch erst klar, als ich schnüffelte. Ich werde untersuchen , wie kann ich Rück ändern verwendenControl_h
inrxvt
... oder vielleicht muss ich über die Suche nach anderen Begriff denken.stty
muss auf der Anwendungsseite ausgeführt werden. Ich bezweifle sehr,telnet
dass Sie Eingabezeichen übersetzen oder dass Sie diese verwenden müssenscript
. Nurstty
auf dem Remote-Computer zu laufen, wird wahrscheinlich den Trick tun.stty
.Enter
senden sie. Wenn Sie Telnet verwenden, befindet sich Ihr Terminal im Raw-Modus: Jedes Zeichen wird sofort an die Anwendung gesendet. Siehe zB den Anfang dieser Seite oder diesen Wikipedia-Artikel .Rücktaste und Control-H wurden so konzipiert, dass sie dasselbe sind, aber heutzutage, insbesondere unter Linux, wird häufig die Rücktaste gesendet, um zu löschen, und es wird eine ungerade Escape-Sequenz gesendet.
In jedem Fall und soweit ich weiß, sollten Telnet oder die TERM-Variable nicht ändern, was die Rücktaste sendet. Dies ist normalerweise eine Konfigurationsfunktion für Terminalemulatoren.
quelle
telnet
achtet nicht auf lokale Terminalzuordnungen der Tastatur. Anne Barretas Notizen über Tastatur und TelnetProgramme sollen die Terminaleinstellungen abfragen, um herauszufinden, was das Rücktastezeichen ist (
^h
und^?
dh\010
und\177
, sind die beiden Auswahlmöglichkeiten da draußen). Verwenden Siestty erase '^h'
oder, umstty erase '^?'
zu deklarieren, was Ihr Terminal sendet.Wenn Sie sich remote (mit Telnet, rsh oder ssh) im Terminal anmelden, müssen Sie
stty
auf der Anwendungsseite ausgeführt werden .stty
Das Terminal wird nicht angewiesen, etwas anderes zu tun. Es informiert den lokalen Terminaltreiber (dh den Teil, der mit Anwendungen im Terminal verbunden ist) über die Einstellungen des Terminals (historisch gesehen ein physisches Objekt, jetzt ein Terminalemulator). Wenn Sie Screen oder eine ähnliche Terminal-in-Terminal-Software ausführen, müssen Siestty
in jedem Bildschirmfenster ausgeführt werden (aber normalerweise kann Screen so konfiguriert werden, dass es aus seiner Konfigurationsdatei das Richtige tut, wenn es nicht sofort funktioniert ).Der Unterschied im Verhalten, den Sie von
netcat
vs. beobachten,telnet
ist auf die Art und Weise zurückzuführen, wie das Terminal verwendet wird: * In netcat befindet sich das Terminal im zeilenweisen Modus (auch als „gekochter Modus“ bezeichnet). Sie bearbeiten eine Zeile (mithilfe der integrierten Edition-Funktion des lokalen Terminals und damit insbesondere der lokalen Stty-Einstellungen) und senden sie dann im endgültigen Zustand an den Remote-Host. * In Telnet befindet sich das (lokale) Terminal im zeichenweisen Modus (auch als "Raw-Modus" bezeichnet). Jeder Tastendruck geht direkt an Telnet, das ihn sofort an das Remote-System weiterleitet. Sie sind abhängig von den Line Edition-Funktionen des Remote-Systems.Es gibt defekte Programme, die sich nicht um die Terminaleinstellungen kümmern. Sieht so aus, als hätten Sie einen von ihnen getroffen. Am besten ändern Sie die Konfiguration Ihres Terminals. Das Gleiche gilt, wenn Sie über ein Remote-Protokoll wie Telnet oder SSH mit einem Gerät kommunizieren müssen und das Gerät nicht konfigurierbar ist.
Mit xterm ist es einfach: Es gibt eine Einstellung zum Umschalten des vom BackSpaceSchlüssel zur Laufzeit gesendeten Zeichens . Schalten Sie im Menü der linken Taste auf "Löschen ist ENTF" um. Programmatisch, senden Sie die Escape - Sequenz
\e[?67h
zu haben , BackSpacesenden^h
oder\e[?67l
haben , BackSpacesenden^?
. Die entsprechende Ressource istXTerm.backarrowKeyIsErase
. Andere Terminalemulatoren können eine ähnliche Schnittstellenfunktion haben oder nicht oder die Escape-Sequenz unterstützen.Viele Terminalemulatoren senden einen von
^h
oder^?
wenn Sie drücken BackSpace, und den anderen Charakter, wenn Sie Ctrl+ drücken BackSpace. Dies kann zur Not nützlich sein.Beachten Sie, dass
showkeys
und Freunde nur auf der Linux-Konsole relevant sind, nicht in X.quelle