Python 通过SSH对远程主机执行telnet命令进行端口检查,并将输出获取到文件

Python 通过SSH对远程主机执行telnet命令进行端口检查,并将输出获取到文件,python,bash,shell,awk,grep,Python,Bash,Shell,Awk,Grep,我有一个如下的文本文件,其中包含主机,站点和端口到telnet Hostname site port appwlsqa02.comp.xxx.com fgh-fst13-scan.comp.xxx.com 1521 appwlsqa03.comp.xxx.com fgh-fst23-scan.comp.xxx.com 1521 cappwlsqa01.comp.xxx.com fgh-fst13-scan.comp.xx

我有一个如下的文本文件,其中包含
主机
站点
端口
到telnet

      Hostname                site                  port
appwlsqa02.comp.xxx.com fgh-fst13-scan.comp.xxx.com 1521
appwlsqa03.comp.xxx.com fgh-fst23-scan.comp.xxx.com 1521
cappwlsqa01.comp.xxx.com fgh-fst13-scan.comp.xxx.com 1521
我的目标是ssh每个
主机名
并执行telnet命令

例如,文件中的第一行

ssh appwlsqa02.comp.xxx.com 
那么

我试过以下方法:

while read HOST site port ; do ssh $HOST "echo exit | telnet $site $port " < /dev/null; done < text.txt`

当尝试使用telnet时,您需要运行类似expect的操作。Telnet获取终端io。Expect将终端替换为伪终端,并允许您编写输入和输出脚本。

我有一些如何获得成功场景的方法,但在失败的情况下,脚本正在运行。这是你需要做的。从后台开始这个过程。然后在下一条语句中,将后台进程Id放入变量中。我想是美元!。然后在后台启动另一个进程,该进程会占用一些时间并终止第一个进程id。您应该将这两条语句放在括号中,并将它们都置于后台(sleep 15;kill$firstpid)&。然后获取该进程id并同时等待它们。等等$firstpid$secondpid。当其中一方死亡时,等待将返回。然后,如果第二个进程仍然存在,请清理它。谢谢你,迈克。它帮助了。问题解决了:)
while read HOST site port ; do ssh $HOST "echo exit | telnet $site $port " < /dev/null; done < text.txt`
# /bin/bash
while read HOST site port ; 
do
echo $HOST $site $port  
ssh -n $HOST "telnet $site $port | grep "Connected" " >> t.txt &
PID=$!
sleep 2 
kill "$PID"

if [ -s t.txt ]
then
echo from $HOST to  $site $port is open >> succ.txt
else
echo from $HOST to  $site $port is closed >> fail.txt
fi
rm t.txt
done < text.txt