![텔넷을 통한 대화형 쉘](https://linux55.com/image/93437/%ED%85%94%EB%84%B7%EC%9D%84%20%ED%86%B5%ED%95%9C%20%EB%8C%80%ED%99%94%ED%98%95%20%EC%89%98.png)
내 계획은 전 세계에 텔넷으로 연결되는 작은 대화형 프로그램인 라우팅 서버를 제공하는 것입니다. 다음과 같습니다: telnet://route-server.he.net
최소한의 예로, socat을 통해 제공되는 간단한 bash로 시작하겠습니다.
socat TCP-LISTEN:9001,reuseaddr,crnl,fork EXEC:bash,pty,stderr,sane,setsid,sigint,echo=0
이제 텔넷을 사용하여 연결합니다.
$ telnet localhost 9001
처음에는 작동하는 것 같습니다.
$ echo foo
foo
문제는 일부 특수 문자(예: ESC, 화살표 키 등)가 쉘 이스케이프 코드로 인쇄된다는 것입니다. "위쪽 화살표" 예:
$ ^[[A
foo
또한 클릭/스크롤/...을 수행하면 이스케이프 코드도 인쇄됩니다.
$ ^[[M r>^[[M#r>
문제는 클라이언트가 기존 라우팅 서버에서와 같이 클라이언트 옵션이나 해킹 없이 계속 텔넷을 사용할 수 있도록 이 동작을 어떻게 수정할 수 있느냐는 것입니다.
답변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