Linux:检查三台主机之间的通信

Linux:检查三台主机之间的通信

我想找到一个 Linux 命令,可以编写一个 bash 来测试三个(或更多服务器)之间的通信。

我的需求如下图所示:

Source  Gateway Dest
Host A  Host B1 Host C1
Host A  Host B2 Host C2
Host A  Host B3 Host C3

我有一台主机 A,它将使用 bash 来测试从主机 B1 到 C1、C2 和 C3 的通信,然后测试从主机 B2 到 C1、C2 和 C3 的通信,依此类推。

该测试可以是单次 ping 或 traceroute,到目前为止我尝试过但没有成功。

答案1

不确定这是否是最优雅的解决方案,但您可以简单地在 B1 到 Bx 上放置一个“checkconnections.sh”,它会对相应的其他服务器运行 ping 并检查结果是否为 0% 包裹丢失:

ping -c 3 192.168.0.34 | grep " 0.0% packet loss"

注意:不同的系统似乎以不同的格式打印 ping 结果,因此请仔细检查 grep " 0.0% packet loss" 是否真正捕获了系统的输出!

如果结果为空,则表示您的连接失败。如果不是,则表示连接正常。告诉脚本写入输出/日志文件。

然后,您可以在主机 A 上放置一个 statuscollection.sh,它将循环遍历所有框 B1 到 Bx,在那里执行检查脚本,然后收集日志文件。

ssh user@boxBx 'path/to/checkconnections.sh'
scp user@boxBx:path/to/log.file destination/Bxlog.file

为了实现此功能,您需要设置基于密钥的身份验证(http://www.cyberciti.biz/tips/ssh-public-key-based-authentication-how-to.html)。

希望这是有意义的。

编辑:根据基于密钥的身份验证(参见上文)并且您知道所有盒子(B1 到 Bx)和主机(C1 到 Cx)的 IP 地址,以下操作可能会有效:

#!/bin/bash

echo "Beginning connection tests."

# create / clear log file
echo "" > results.log

for boxip in [list IPs of your boxes B1 to Bx here]
do
  for hostip [list IPs of your hosts C1 to C2 here]
  do  
    echo "Checking connection from $boxip to $hostip:" >> results.log
    ssh user1@b$boxip 'ping -c 3 $hostip | grep " 0% packet loss"' >> results.log
    echo "--------------------------------" >> results.log
  done
done

有关循环的更多信息,请参见此处的示例 11-1:http://tldp.org/LDP/abs/html/loops1.html

相关内容