使用tcl/expect来准备隧道



作为更大计划的一部分(跳过一堆跃点,然后在PortForwarding被禁用的设置中创建一个到mongodb的端口隧道(,我试图创建一个tcl/expect脚本来验证是否可以中继tcl/expert准备的流。

这是我的实验:

# terminal 1 [listen to 2000]
nc -l 2000
# terminal 2 [listen to 200 then connect it to 2000 using expect]
socat tcp-l:200 system:'./nc-test.exp'
# terminal 3 [connect to 200]
nc localhost 200

和我的tcl/expect简单脚本(nc-test.exp(:

#!/usr/local/bin/expect
log_user 0
spawn nc localhost 2000
stty raw -echo
interact -o -nobuffer

现在的问题是我在terminal 3中写的所有内容都回想起了我自己。奇怪的是,当我将socat直接连接到nc localhost 2000时,或者当我直接执行tcl/expect脚本时,都不会发生这种情况。你能帮我算出吗

  • 是什么导致了不想要的回声
  • 我的大计划可行吗?(我主要担心的是保持流的畅通(

expect脚本中的stty命令作用于/dev/tty,它可能是终端2中的tty。然而,spawn创建了另一个pty,以便与它启动的命令进行对话。该tty将继承自当前tty,即终端2,因此将打开echo。只需将stty raw -echo行移动到派生之前就足够了,或者更明确地说,您可以通过等命令将stty设置设置为spawn使用

set stty_init "raw -echo"

在CCD_ 11。

最新更新