我的计划是提供一个路由服务器,这是一个小型交互式程序,通过 telnet 到世界各地。像这样:telnet://route-server.he.net
作为一个最小的例子,我将从一个简单的 bash 开始,通过 socat 提供:
socat TCP-LISTEN:9001,reuseaddr,crnl,fork EXEC:bash,pty,stderr,sane,setsid,sigint,echo=0
现在我使用 telnet 连接:
$ telnet localhost 9001
一开始它似乎有效:
$ echo foo
foo
问题是:一些特殊字符(如 ESC、箭头键等)被打印为它们的 shell 转义码。 “向上箭头”示例:
$ ^[[A
foo
另外,单击/滚动/...也会打印转义码:
$ ^[[M r>^[[M#r>
问题是:我如何才能修复此行为,使客户端可以继续使用 telnet,而无需任何客户端选项或黑客攻击,就像在现有的路由服务器上那样。
答案1
根据 ipors 评论,我们设法通过以下设置运行该服务:
xinetd 从 GNU Inetutils 运行 telnetd (ftp://ftp.gnu.org/gnu/inetutils/)
server = /path/to/custom/telnetd
在 server_args 中,我们定义了一个 exec-String,它指向一个包装脚本,以使用所需的选项运行 Birdc
server_args = -h -E "/opt/bird-telnet.sh"
/opt/bird-telnet.sh 看起来像
#!/bin/bash
/usr/sbin/birdc -r -s /var/run/bird/bird.ctl