自动退出Telnet命令返回提示,无需人工干预^]退出关闭退出代码1

时间:2017-01-05 01:45:56

标签: linux telnet exit exit-code connection-close

我在主机上为给定端口(打开)运行telnet命令,它返回0(成功)。

为了手动尝试telnet,我输入以下命令,然后按控制+括号即^],然后按Enter键,然后我进入telnet>提示符,如果我键入closequit,它返回到$提示符,并且当端口2878打开时,看到上一个命令的退出状态显示0(成功)(根据telnet命令的输出)。

[vagrant@myvagrant /tmp] $ telnet `hostname` 2878
Trying 127.0.0.1...
Connected to myvagrant.
Escape character is '^]'.
^]

telnet> close
Connection closed.
[vagrant@myvagrant /tmp] $ echo $?
0

现在,我想在没有任何人为干预的情况下运行相同的操作,即我不想手动提供^]并按Enter键进入telnet>提示符,然后输入close(或quit)telnet命令,最后返回$提示符。

为此,我尝试使用echo -e命令选项并提供^]\n(对于新行字符,即Enter键)和{{1命令(对于close提示,以便我回到telnet>提示符。这样做,按预期工作,但对于最后一个命令$的退出状态,我得到echo $?(而不是 0 )。 为什么?

1

也尝试了here-doc方法,但不确定为什么它会为打开的有效端口返回[vagrant@myvagrant /tmp] $ echo -e "^]\nclose" | telnet `hostname` 2878 Trying 127.0.0.1... Connected to myvagrant. Escape character is '^]'. Connection closed by foreign host. [vagrant@myvagrant /tmp] $ [vagrant@myvagrant /tmp] $ echo $? 1 [vagrant@myvagrant /tmp] $ (作为退出代码)。

1

如果端口打开并如何获取[vagrant@myvagrant /tmp] $ telnet `hostname` 2878 <<GIGA > echo ^] > echo close > GIGA Trying 127.0.0.1... Connected to myvagrant. Escape character is '^]'. Connection closed by foreign host. [vagrant@myvagrant ~/aks/always-latest-ws-sunny] $ echo $? 1 [vagrant@myvagrant ~/aks/always-latest-ws-sunny] $ 作为退出代码,我如何自动退出telnet?如果有一种方法可以捕获上一个命令的输出,可能是我可以通过外部主机关闭&#39; 连接。&#39;用于标记成功的字符串(0)。

5 个答案:

答案 0 :(得分:2)

对上面Matthew提供的答案进行了一点改进,使您可以在shell脚本中使用它:

$ echo -e '\x1dclose\x0d' | telnet google.com 80
Connected to google.com.
Escape character is '^]'.

telnet> close
Connection closed.
$ echo $?
0

答案 1 :(得分:0)

您可能需要其他Linux软件包(如expect)来实现您的目标。

答案 2 :(得分:0)

不使用Expect,我猜使用 HERE 文件(&lt;

[vagrant@myvagrant /tmp] $ telnet_result=$(telnet `hostname` 2878 <<GIGA
echo ^]
echo close
GIGA
); echo $telnet_result | grep "Escape character is '^]'"; echo $?
Connection closed by foreign host.
 Escape character is '^]'.
0
[vagrant@myvagrant /tmp] $ 

对于错误/无效/非开放端口,同样给出1(如预期的那样)。

[vagrant@myvagrant /tmp] $ telnet_result=$(telnet `hostname` 287811111 <<GIGA
echo ^]
echo close
GIGA
); echo $telnet_result | grep "Escape character is '^]'"; echo $?
telnet: connect to address 127.0.0.1: Connection refused
1
[vagrant@myvagrant /tmp] $ 

答案 3 :(得分:0)

╭─ ~
╰» echo "^]close^M" | telnet localhost 22; echo $?
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.

telnet> close
Connection closed.
0

要输入^]^M字符,请分别按ctrl+v ctrt+]ctrl+v ctrl+m

答案 4 :(得分:0)

这是干净的方法

echo -n | telnet `hostname` 2878

有关此行为的更多信息,请参见此link