【问题标题】:Execute telnet command for Port check by SSH to remote hosts and get the output to a file通过 SSH 对远程主机执行 telnet 命令进行端口检查,并将输出保存到文件中
【发布时间】:2017-02-01 21:58:07
【问题描述】:

我有一个像下面这样的文本文件,带有 hostsiteport 到 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 每个hostname 并执行 telnet 命令

例如文件中的第一行

ssh appwlsqa02.comp.xxx.com 

那么,

telnet fgh-fst13-scan.comp.xxx.com  1521

我在下面尝试过:

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

我必须将hostnames 读取为一个变量$HOST,并将主机读取为$site,并将端口读取为$port

更新:

这是我根据建议开发的脚本:

# /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

【问题讨论】:

    标签: python bash shell awk grep


    【解决方案1】:

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

    【讨论】:

    • 我有一些如何设法获得成功的场景,但失败的情况下脚本挂了
    • 好的。这是您需要做的。
    • 在后台启动进程。然后在下一条语句中将后台进程 ID 放入一个变量中。我认为它是以美元为单位的!然后在后台启动另一个进程,该进程会休眠一段时间并杀死第一个进程 ID。您应该将 2 个语句放在括号中,并将它们都放在背景中 (sleep 15; kill $firstpid) &。然后获取该进程ID并等待它们。等待 $firstpid $secondpid。当其中任何一个死亡时,等待将返回。然后清理第二个进程,如果它还活着。
    • 谢谢你迈克..它帮助..问题解决了:)
    猜你喜欢
    • 2012-05-06
    • 2012-05-28
    • 1970-01-01
    • 1970-01-01
    • 2015-04-03
    • 2015-11-20
    • 1970-01-01
    • 2012-01-12
    • 1970-01-01
    相关资源
    最近更新 更多