【问题标题】:Using tcl/expect to prepare a tunnel使用 tcl/expect 准备隧道
【发布时间】:2020-12-20 22:47:18
【问题描述】:

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

这是我的实验:

# 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 脚本时,这不会发生。你能帮我算一下吗

  • 是什么导致了不需要的回声?
  • 我更大的计划可行吗? (我主要担心的是保持流原始)

【问题讨论】:

    标签: ssh expect portforwarding netcat


    【解决方案1】:

    expect 脚本中的stty 命令作用于/dev/tty,这可能是终端 2 中的 tty。但是,spawn 创建了另一个 pty 来与它启动的命令对话。该 tty 将从当前 tty 继承,即终端 2,因此将启用 echo。将stty raw -echo 行移动到生成之前可能就足够了,或者更明确地说,您可以通过类似的命令设置spawn 使用的stty 设置

    set stty_init "raw -echo"
    

    spawn 之前。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-14
      • 2012-10-27
      • 2014-06-18
      • 2015-05-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多