我正在创建一个bash脚本,该脚本可以自动检查两个UNIX主机之间的连接性。需要检查特定端口是否从一台主机打开到另一台主机。主机没有NCAT(由于某些限制),因此只能使用Telnet。
如果telnet连接成功,代码可以正常工作,但是如果telnet失败则需要2分钟以上的时间。如果没有连接,我需要telnet在2秒内退出。试图找到一种方法来强制telnet命令即使失败也会退出。
我创建了两个脚本,它们可以读取源文件并从此处运行以下命令以远程登录目标服务器。
下面的代码将在需要测试telnet连接的服务器上执行。
#!/usr/bin/bash
>/wastmp/$1.txt
echo "********************************************************************" >>/wastmp/$1.txt
echo "Checking Telnet connection from "$1 >>/wastmp/$1.txt
echo "********************************************************************" >>/wastmp/$1.txt
while read target;
do
x=$(sleep 3 | telnet `echo $target | awk 'BEGIN { FS=":" } { print $1 }'` ` echo $target | awk 'BEGIN { FS=":" } { print $2 }
'` | grep -i connected | awk {'print $1'})
if [[ "$x" == "Connected" ]];
then
echo $target"=Success" >>/wastmp/$1.txt
else
echo $target"=Fail, please check server & port">>/wastmp/$1.txt
fi
done </wastmp/target_server
预期结果: host1:port =失败,请检查服务器和端口 host2:port =失败,请检查服务器和端口 。 。
hostn:port =成功
答案 0 :(得分:0)
您需要向telnet发送出口。滞后的另一个原因是冗余awk命令的管道。
这就是我写x变量的方式:
x=$(echo exit 0 | telnet $target 2>/dev/null | grep -o "Connected")
条件也可以缩短为:
echo exit 0 | telnet $target 2>/dev/null | grep -o "Connected" 1>/dev/null && echo "Success" >>/wastmp/$1.txt || echo "Failed" >>/wastmp/$1.txt