我有很多 Linux 机器,它们的命令和磁盘空间都非常有限。但它有telnet
命令。
我远程连接到每个探测器(以编程方式),并通过 SSH 发出一行 linux 命令。
我需要使用 telnet 运行单个命令来连接到特定机器,然后立即断开连接。
我可以做到这一切,但是立即断开连接部分。 Telnet 打开某种控制台或终端,我无法找出一行命令来运行 telnet 命令,然后立即断开连接。
如果这样做,我可以轻松解析文本输出以获取错误消息,因为无法连接到指定端口上的计算机,而这正是我正在寻找的。
那么如何运行单行命令来使用 telnet 连接到一台计算机并随后断开连接呢?
答案1
您应该能够将exit
命令通过管道传输到telnet
.尝试:
echo 'exit' | telnet {site} {port}
看看是否有效。 (它似乎在我的网络服务器上工作,但是 YMMV)。
答案2
下面给出最简单、最容易的方法。
sleep <n> | telnet <server> <port>
n
- 自动退出前的等待时间(以秒为单位)。它可以是小数,如 0.5。请注意,某些所需的输出可能不会在指定的等待时间内返回。所以我们可能需要相应增加。server
- 目标服务器 IP 或主机名。port
- 目标服务端口号。
您还可以将输出重定向到文件,如下所示:
sleep 1 | telnet <server> <port> > output.log
答案3
就我而言,这是有效的。 (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
答案4
这是另一个版本上面回答这使得它的行为更像“正常”的 telnet 语法。如果您喜欢我的回答,请不要给这个答案,而是给原来的答案。
#!/bin/bash
if [ "$2" == "" ]; then
echo "Syntax: $0 <host> <port>"
exit;
fi
host=$1
port=$2
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