通过 telnet 的交互式 shell

通过 telnet 的交互式 shell

我的计划是提供一个路由服务器,这是一个小型交互式程序,通过 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

相关内容