更改 telnet 中的提示符

更改 telnet 中的提示符

在大家的帮助下,我能够在 ssh 会话中设置自定义提示符(谢谢!)。现在我需要在 telnet 中执行相同操作,但我不确定可以使用什么语法。

基本上,telnet 提示符只是一个>字符,我需要将其修改为可以在自动化作业中更可靠地检测到的内容。希望这有意义。

从 telnet 内部,尝试用类似爆炸声的命令退出该命令!PS1=spam并且!PS2=eggs不进行更改。

wim@wim-acer:~$ ssh [email protected] -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:~$ 

答案1

提示符由命令 shell 提供,而不是由 SSH 或 Telnet 等网络协议及其相关服务和客户端提供。无论您使用的是 telnet、ssh、串行终端还是本地控制台,都没有关系。

您可以通过设置环境变量(例如 PS1 和 PS2)在许多 shell(例如 bash)中设置提示符。

尝试

 > PS1="hello : "
 hello : 

更新

您的问题是……

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

/bin/false不是 shell!它是用于禁用 telnet 登录的条目。你用这个不会有任何效果。如果你真的想使用不安全的协议(如 telnet)而不是安全的协议(如 ssh),你必须配置 telnet 服务来为你提供适当的 shell。

答案2

就像 @RedGrittyBrick 写的那样,您使用的是 telnet 还是 SSH 并不重要。重要的是环境变量转发。

事实上,您告诉 ssh 要做的是连接到 TTY,然后将命令传递export PS1='Sending a custom prompt \w \$ '; exec sh给默认 shell。

对于 telnet,请查看environ(请参阅手册页)。它使用 telnet ENVIRON 协议通过连接传输环境变量,我想您可以根据需要将适当的命令添加到 ~/.telnetrc,或者仅在每个会话的基础上导出适当的环境变量。

有关在 SSH 中执行此操作的正确方法,请查看 ssh 手册页的 ENVIRONMENT 部分。不过,我不确定是否找到了每个实例执行此操作的明显方法。

相关内容