我有许多 linux 机器,但它们的命令和磁盘空间非常有限。但它上面有telnet命令。
我远程连接到这些探测器中的每一个(以编程方式)并通过 SSH 发出一行 linux 命令。
我需要运行一个命令来连接到特定机器,使用 telnet,然后立即断开连接。
我可以做到这一切,但立即断开连接部分。Telnet 会打开某种控制台或终端,我无法找出运行 telnet 命令然后立即断开连接的单行命令。
如果我这样做,我可以轻松解析文本输出的错误消息,因为无法连接到指定端口上的机器,这正是我正在寻找的。
那么如何运行单行命令来使用 telnet 连接到一台机器然后断开连接呢?
小智 37
您应该能够将exit命令通过管道传输到telnet. 尝试:
echo 'exit' | telnet {site} {port}
Run Code Online (Sandbox Code Playgroud)
看看这是否有效。(它似乎在我的网络服务器上工作,但 YMMV)。
Sef*_*eff 11
下面给出了最简单和最简单的方法。
sleep <n> | telnet <server> <port>
Run Code Online (Sandbox Code Playgroud)
n- 自动退出前的等待时间(以秒为单位)。它可能是像 0.5 这样的小数。请注意,在指定的等待时间内可能无法返回某些必需的输出。所以我们可能需要相应增加。
server - 目标服务器 IP 或主机名。
port - 目标服务端口号。
您还可以将输出重定向到文件,如下所示:
sleep 1 | telnet <server> <port> > output.log
Run Code Online (Sandbox Code Playgroud)
小智 9
尝试
echo -e '\x1dclose\x0d' | telnet {HOSTNAME} {PORT}
Run Code Online (Sandbox Code Playgroud)
上面最好的部分是您也可以获得退出状态。如果 telnet 成功,退出代码将为 0,否则为 1
小智 7
在我的情况下,这是有效的。(CentOS 7):
while read host port; do
r=$(bash -c 'exec 3<> /dev/tcp/'$host'/'$port';echo $?' 2>/dev/null)
if [ "$r" = "0" ]; then
echo "$host $port is open"
else
echo "$host $port is closed"
exit 1 # To force fail result in ShellScript
fi
done
Run Code Online (Sandbox Code Playgroud)