如何使用 empty 与 telnet 交互

How to interact with telnet using empty

我需要替换一个非常简单的 expect 脚本,如下所示:

#!/usr/bin/expect
spawn telnet 192.168.1.175
expect {
    "assword" {send "lamepassword\r"}
}
interact

使用 empty 的等效 bash 脚本,如下所示:

#!/bin/bash
empty -f -i in -o out telnet 192.168.1.175
empty -w -i out -o in "assword" "lamepassword\n"

之后我需要用户使用 telnet interact,我不知道该怎么做。我想到的最接近的事情是使用类似 socat - in 的方法将 stdinstdoutnamed pipes 绑定。任何建议都非常受欢迎!

I tried cat out & cat /dev/stdin >in, it works, but it has an extra newline, tab completion does not work and ctr+c terminates cat and not the running host process. I am trying to persuade socat to act according to those needs.

使用socat 将键盘输入传输到telnet 进程是个好主意。示例:

cat out & socat -u -,raw,echo=0 ./in

为了允许Ctrl-C终止socat,添加escape=3:

cat out & socat -u -,raw,echo=0,escape=3 ./in

但请注意,这不会终止 telnet 会话,因为它 以守护进程模式启动 ,因此您可以通过执行以下命令重新连接到 telnet socat 再次。要结束 telnet,您可以 logout.