Eingabeaufforderung in Telnet ändern

2087
wim

Mit etwas Hilfe von Leuten hier konnte ich in einer SSH-Sitzung eine benutzerdefinierte Eingabeaufforderung festlegen (Danke!). Jetzt muss ich dasselbe in Telnet tun, aber ich bin mir nicht sicher, welche Syntax ich dafür verwenden könnte.

Im Grunde ist die Telnet-Eingabeaufforderung nur ein >Zeichen. Ich muss sie an etwas anpassen, das ich in Automatisierungsaufgaben zuverlässiger erkennen kann. Hoffe das macht Sinn.

In Telnet versuchte der Versuch, diesem Befehl mit einem Knall zu entkommen, !PS1=spamund !PS2=eggsänderte es nicht.

wim@wim-acer:~$ ssh guest@192.168.1.124 -i ~/.ssh/guest_nopassphrase -t "export PS1='Sending a custom prompt \w \$ '; exec sh" Sending a custom prompt ~ $ set HOME='/var/tmp' IFS='  ' LOGNAME='guest' PATH='/sbin:/usr/sbin:/bin:/usr/bin' PPID='1128' PS1='Sending a custom prompt \w $ ' PS2='> ' PS4='+ ' PWD='' SHELL='/bin/sh' TERM='xterm' USER='guest' Sending a custom prompt ~ $ telnet localhost <snip>  Entering character mode Escape character is '^]'.  > !set CONSOLE='/dev/ttyp0' HOME='/var/tmp' IFS='  ' LOGNAME='root' PATH='/sbin:/bin:/usr/sbin:/usr/bin' PPID='546' PREVLEVEL='N' PS1='\w \$ ' PS2='> ' PS4='+ ' PWD='/var/tmp' RESPAWN_COUNT='1' RESPAWN_LAST='0' RESPAWN_MAX='5' RESPAWN_TIME='5' ROOTDEV='/dev/sla1' RUNLEVEL='5' SHELL='/bin/false' TERM='linux' USER='root' >  > Connection closed by foreign host Sending a custom prompt ~ $ Connection to 192.168.1.124 closed. wim@wim-acer:~$  
0
Hmmm ... Spam, schöner Spam, wunderbarer Spam! Daniel Beck vor 12 Jahren 1

2 Antworten auf die Frage

1
RedGrittyBrick

Die Eingabeaufforderung wird von der Befehlsshell bereitgestellt, nicht von Netzwerkprotokollen wie SSH oder Telnet und den zugehörigen Diensten und Clients. Dabei spielt es keine Rolle, ob Sie Telnet, SSH, ein serielles Terminal oder eine lokale Konsole verwenden.

Sie können die Eingabeaufforderung in vielen Shells (z. B. Bash) festlegen, indem Sie Umgebungsvariablen wie PS1 und PS2 festlegen.

Versuchen

 > PS1="hello : " hello :  

AKTUALISIEREN

Ihre Fragen sagen ...

 $ telnet localhost <snip> … > !set … SHELL='/bin/false' … > Connection closed by foreign host 

/bin/falseist keine Schale! Dies ist die Art von Eintrag, der zum Deaktivieren von Telnet-Anmeldungen verwendet wird. Sie werden damit nichts erreichen. Wenn Sie wirklich ein unsicheres Protokoll wie Telnet anstelle eines sicheren Protokolls wie ssh verwenden möchten, müssen Sie den Telnet-Dienst so konfigurieren, dass Sie eine richtige Shell erhalten.

Das funktioniert in sh, aber in Telnet bekomme ich `PS1 =" Hallo: ": Unbekannter Befehl" wim vor 12 Jahren 0
@wim: siehe aktualisierte Antwort. RedGrittyBrick vor 12 Jahren 0
Vielen Dank! Das Gerät ist eine Set-Top-Box, und ich habe keine Berechtigung zum Ändern der Firmware. Ich versuche nur, bestimmte Jobs auf Hunderten dieser Boxen mit "pexpect" zu automatisieren, und es wäre einfacher, die Aufforderung zuverlässig zu finden wim vor 12 Jahren 0
0
a CVn

Wie @RedGrittyBrick schrieb, spielt es keine Rolle, dass Sie Telnet oder SSH verwenden. Was zählt, ist das Weiterleiten von Umgebungsvariablen.

In der Tat teilen Sie ssh mit, dass Sie sich mit einem TTY verbinden und den Befehl export PS1='Sending a custom prompt \w \$ '; exec shan die Standard-Shell übergeben müssen.

Informationen zu Telnet finden Sie unter environ(siehe Manpage). Es verwendet das telnet ENVIRON-Protokoll, um Umgebungsvariablen über die Verbindung zu übertragen, und ich kann mir vorstellen, dass Sie die entsprechenden Befehle zu Ihrem ~ / .telnetrc hinzufügen können, wenn Sie möchten, oder einfach die entsprechenden Umgebungsvariablen auf Sitzungsbasis exportieren.

Im SSH-Abschnitt auf der ssh-Man-Seite finden Sie eine Beschreibung der Vorgehensweise in SSH. Ich bin mir jedoch nicht sicher, ob ich eine offensichtliche Möglichkeit sehe, dies pro Instanz zu tun.