【问题标题】:How to interact with telnet using empty如何使用empty与telnet交互
【发布时间】:2016-12-31 16:55:51
【问题描述】:

我需要替换一个非常简单的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,我不知道该怎么做。我想到的最接近的事情是将stdinstdoutnamed pipes 绑定使用socat - in 之类的东西。任何建议都非常受欢迎!

【问题讨论】:

  • 我唯一的问题是,你为什么使用 telnet?
  • 因为用户与之交互的主机运行的是telnet。
  • 我试过cat out & cat /dev/stdin >in,它可以工作,但它有一个额外的换行符,制表符完成不起作用,ctr+c 终止cat 而不是正在运行的主机进程。我试图说服socat按照这些需求行事。

标签: linux bash pipe expect telnet


【解决方案1】:

我试过cat out & cat /dev/stdin >in,它有效,但它有一个额外的 换行,制表符完成不起作用,ctr+c 终止 cat 和 不是正在运行的主机进程。我试图说服socat采取行动 根据这些需求。

使用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 会话,因为它确实以守护程序模式启动,因此您可以通过再次执行socat 重新连接到telnet。要结束telnet,你可以直接logout

【讨论】:

  • 我一直在寻找 socat 参数的正确组合,而您建议的组合可以提供我需要的确切行为(制表符完成、命令历史记录、行编辑等)。谢谢你。我刚刚用 escape=0x1a 替换了escape=3,所以我可以用ctrl+z 退出,并且仍然可以像往常一样终止任何主机进程,ctrl+c
猜你喜欢
  • 2019-12-05
  • 1970-01-01
  • 2014-12-24
  • 2012-10-31
  • 2016-03-13
  • 2011-02-21
  • 1970-01-01
  • 1970-01-01
  • 2022-09-30
相关资源
最近更新 更多