Telnetによる対話型シェル

Telnetによる対話型シェル

私の計画は、世界中のTelnetに接続する小さなインタラクティブプログラムであるルーティングサーバーを提供することです。次のとおりです。telnet://route-server.he.net

最小限の例として、socatを介して提供される単純なbashで始めましょう。

socat TCP-LISTEN:9001,reuseaddr,crnl,fork EXEC:bash,pty,stderr,sane,setsid,sigint,echo=0

これでTelnetを使用して接続します。

$ telnet localhost 9001

最初はうまくいくようです。

$ echo foo
foo

問題は、一部の特殊文字(ESC、矢印キーなど)がシェルエスケープコードで印刷されることです。 「上矢印」の例:

$ ^[[A
foo

また、クリック/スクロール/...を実行すると、エスケープコードも印刷されます。

$ ^[[M r>^[[M#r>

問題は、クライアントが既存のルーティングサーバーと同様に、クライアントオプションやハッキングなしでTelnetを引き続き使用できるように、この動作をどのように変更できるかということです。

答え1

iporのコメントに基づき、以下の設定でサービスを実行しました。

xinetdはGNU Inetutilsでtelnetdを実行します(ftp://ftp.gnu.org/gnu/inetutils/)

server = /path/to/custom/telnetd

server_argsは、必要なオプションでBirdcを実行するためのラッパースクリプトを指すexec-Stringを定義します。

server_args = -h -E "/opt/bird-telnet.sh"

/opt/bird-telnet.sh は次のようになります。

#!/bin/bash
/usr/sbin/birdc -r -s /var/run/bird/bird.ctl

関連情報