在大家的帮助下,我能够在 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 部分。不过,我不确定是否找到了每个实例执行此操作的明显方法。