在一组主机之间执行 ping(全部到全部)

在一组主机之间执行 ping(全部到全部)

我有 4 台服务器,我想互相 ping 通。

预期执行ping

ping from 1 to 2, 3, and 4 
ping from 2 to 1, 3, and 4 
ping from 3 to 1, 2, and 4 
ping from 4 to 1, 2, and 3 

如何通过bash脚本实现这一点?

所有 4 台服务器的用户登录均已配置为无密码。

答案1

为了监控如此少量的机器,我会使用烟平而不是用脚本重新发明轮子。

它将提供更直观的反馈、一段时间内的平均历史数据,甚至专业的外观和感觉,向他人展示另一项服务和出色的工作。人们和 PHB 喜欢通过视觉反馈来监控事物。

事实上,过去当我与互联网的卫星连接不太可靠时,我用它来监控基础设施的关键点。

配置在一个小文本文件中完成,并且很容易添加新的IP地址;它还有一个漂亮的网络界面。您只需要为其安装一个轻量级 Web 服务器即可。

您可以监控几乎所有无法通过 ICMP/ping 监控的内容;除了这4台服务器之外,您还可以监控其他关键设备。

要了解界面的工作原理,请参阅大学外部世界的冒烟界面

另请参阅示例图像:

图像1 图像2

安装完Web服务器和Smokeping后,实际的配置文件可以像这样简单:

*** Targets ***
 probe = FPing

 menu = Top
 title = Network Latency Grapher
 remark = Welcome to this SmokePing website.

 + mysite1
 menu = Site 1
 title = Hosts in Site 1

 ++ myhost1
 host = myhost1.mysite1.example
 ++ myhost2
 host = myhost2.mysite1.example

 + mysite2
 menu = Site 2
 title = Hosts in Site 2

 ++ myhost3
 host = myhost3.mysite2.example
 ++ myhost4
 host = myhost4.mysite2.example

答案2

只需将名称存储在数组中并对其进行迭代,使用ssh连接到每个主机并 ping:

ips=("server1" "server2" "server3" "server4");
for((i=0;i<${#ips[@]};i++)); do 
    for((k=0;k<${#ips[@]};k++)); do
        [[ $i -ne $k ]] && ssh "${ips[$i]}" ping -c1 "${ips[$k]}"; 
    done
done

答案3

fping安装了吗?这可能会让这变得最简单:

$ hosts="www smtp"
$ for host in $hosts ; do 
    echo "$host:"; 
    ssh iv@$host "fping $hosts";
  done
www:
www is alive
smtp is alive
smtp:
www is alive
smtp is alive

(我知道,这是一个懒惰的解决方案。)

答案4

它非常适合您的要求

它将登录 server1 并仅对 server2 和 server3 执行 ping 操作,反之亦然

#!/bin/bash
while read line
do
ssh root@$line "sed "/$line/d" /root/p_final.txt |sed '/^$/d' | sed -r "s/\s+//g"|awk '{print $1}' | sed 's/^/ping -c2 /g'| sh" </dev/null
done </root/p_final.txt

其中文件 p_final.txt 包含 IP 的一一列表。如有任何疑问,请告诉我

相关内容